Wykład nr 1

Historia Rubiego i Railsów

  • 1993 – Yukihiro Matsumoto San, Japonia
  • 1995 – pierwsze wydanie, lista dyskusyjna w Japonii
  • 1996 – Ruby wydanie 1.0
  • 1999 – pierwsza angielska lista dyskusyjna
  • 2000 – pierwsza angielska książka na temat Rubiego
  • 2004 – początek pracy nad Ruby on Rails, David Heinemeier Hansson, Dania
  • 2005 – Ruby on Rails wydanie 1.0
  • 2007 – Ruby wydanie 1.9.0
  • 2013 – Ruby wydanie 2.0.0
  • 2013 – Ruby on Rails wydanie 4

Otoczenie Rubiego

  • C/C++ – systemy operacyjne, systemy wbudowane, narzędzia systemowe
  • Java – aplikacje korporacyjne i duże aplikacje serwerowe
  • C# – programy dla systemu Windows, aplikacje webowe
  • Objective-C – programy dla systemów OS X i iOS
  • PHP – aplikacje webowe
  • Python, Perl – programowanie skryptowe, programowanie systemowe, aplikacje webowe
  • JavaScript – programowanie po stronie klienta (w przeglądarce), ostatnio również po stronie serwera (node.js)
  • ActionScript – programowanie po stronie klienta (Flash)
  • Swift – nowy język na platformy iOS i OS X wspierany przez Apple

Sukcesy Rubiego

Praca

  • Ogłoszenia na forum.rubyonrails.pl
  • Zwykle podawane są widełki płacowe.
  • Jak zdobyć pracę?
    • odpowiadąc na pytania na stackoverflow.com
    • rozwijać opensource'owy projekt na githubie
    • miec dużo plusów na LinkedIn w działce Ruby/Ruby on Rails
  • Pracodawcy czesto sami sie zgłaszają.
  • Rails Girls Summer of Code.

Cechy języka

  • 100% obiektowo zorientowany
  • dziedziczenie jednobazowe
  • interpretowany
  • dynamicznie typizowany
  • silnie typizowany
  • funkcjonalny styl programowania
  • przeciażanie operatorów
  • garbage collector
  • mechanizm wyjatków
  • bloki i domknięcia
  • metaprogramowanie

100% obiektowo zorientowany

wszystko jest obiektem, w tym:
nil # wartość pusta

nil.nil? #=> true

true # wartość logiczna

true.nil? #=> false

1 # liczby

1.zero? #=> false

"abc" # łańcuchy znaków

"abc".empty? #=> false

[1,2,3] # tablice

[1,2,3][0] #=> 1

/a|b/ # wyrażenia regularne

/a|b/.match("a") #=> 0

lambda { } # bloki kodu (funkcje anonimowe)

 

Interpreter

ruby-1.9.2-p290 > a = 10

=> 10

ruby-1.9.2-p290 > b = 5

=> 5

ruby-1.9.2-p290 > a + b

=> 15

ruby-1.9.2-p290 > def suma(a,b)

ruby-1.9.2-p290 ?> a + b

ruby-1.9.2-p290 ?> end

=> nil

ruby-1.9.2-p290 > suma(1,2)

=> 3

ruby-1.9.2-p290 >

Dynamiczna typizacja

a = [1,2,3]

a[1] #=> 2

a = "ala ma kota"

a[1] #=> "l"

def sum(a,b)

    a + b

end

sum(1,2) #=> 3

sum([1],[2,3]) #=> [1,2,3]

Silna typizacja

a = 10

b = "5"

a + b

# TypeError: String can't be coerced into Fixnum

# from (irb):3:in `+'

a = 10

b = 5.0

a + b

#=> 15.0

if 0

    puts "Zero" #=> "Zero"

end

Funkcjonalny styl programowania

str = "ala ma kota"

method = str.method(:empty?)

method.call #=> false

closure = lambda {|a,b| a + b}

closure.call(1,3) #=> 4 def

multiply(multiplier)

    lambda {|a| a * multiplier }

end

three_times = multiply(3)

three_times.call(5) #=> 15

three_times.call(-2) #=> -6

Mechanizm wyjatków

begin

    file = File.open("nie_ma_mnie.txt")

    file.each do |line|

        puts line

    end

rescue Exception => ex

    puts "Wystapił wyjatek #{ex}"

end

Ewaluacja wyrażeń

name = "Ala"

length = name.size > 5 ? "długie" : "krótkie"

length =

    if name.size > 5

        "długie"

    else

        "krótkie"

    end

 

Przegląd składni

  • brak średników (pod warunkiem, że nie umieszczasz wielu poleceń w jednej linii, co jednak jest odradzane)
  • brak wymogów co do wcięć (oczywiscie właściwe wcięcia poprawiają czytelność kodu)
  • brak deklaracji typów – wystarcza inicjowanie zmiennych
  • 1-linijkowe komentarze zaczynaja sie znakiem #
  • specjalny obiekt reprezentujacy wartość pusta zwany nil
  • wszystko jest wyrażeniem (równiez if, case, itp.)
  • opcjonalne nawiasy
Wróć Idź do zadań