Po raz pierwszy usłyszałem o Rubym   na Advogato, gdzie opisywał go jego   twórca. Wiele reakcji nie było zbyt przychylnych: „Co, kolejny język? A nie   lepiej – zamiast marnować siły – pomóc dodawać nowe możliwości do istniejacych   języków?”. Yukihiro Matsumoto uważa, że nie.
Wygląda na to, że Japończycy – gdzie podobno Ruby jest bardzo popularny   (O’Reilly wydało nawet książkę „Programming Ruby” po japońsku) – bardzo  upodobali sobie „czystą” obiektowość, będącą jedna z podstawowych cech   Ruby’ego.
Jak to wygląda w praktyce? Otóż wszystkie dane w Rubym są traktowane  jako instancje tej samej klasy, bez różnicy, dzięki czemu wsystkie  maja wspólne metody i własności. Weźmy prosty przykład:
a=1 puts a.type a=11111111111111111111111111111111111 puts a.type a="a" puts a.type
W rezultacie otrzymamy:
Fixnum Bignum String
Dodatkowo, jak widzimy, Ruby przezroczyście konwertuje liczby w zależności   od wielkości. Inna „elegancką” cechą tego języka jest oznaczanie zakresu  zmiennych przy pomocy prefiksów $ i @, zaś stałe są pisane kapitalikami.
Ogólnie rzecz biorąc składnia jest bardzo intuicyjna i  przejrzysta. Wynik działania każdego z poniższych fragmentów kodu  będzie taki sam:
a) owoce=["jabłko","gruszka","pietruszka","czereśnia"] puts owoce b) owoce=["jabłko","gruszka","pietruszka","czereśnia"] for i in 1 .. owoce.length puts owoce[i-1] end c) owoce=["jabłko","gruszka","pietruszka","czereśnia"] i = 0 while i < owoce.length puts owoce[i] end d) ["jabłko","gruszka","pietruszka","czereśnia"].each do |i| puts i end
Jak widać, brak tu perlowego zamieszania z @,$... ;)  
  Na uwagę zasługuje zwłaszcza ostatni fragment. Ponieważ Ruby moze dokonywać  ewaluacji całego bloku, można go zapisać jeszcze inaczej:
  ["jabłko","gruszka","pietruszka","czereśnia"].each   {|i| puts i}  
Równie intuicyjne są słowniki:
   telefony = { "marek" => 2211, "wojtek" => 4309 }   puts telefony["marek"]  
Cóż jednak można zrobić z samym językiem, jeśli brak odpowiednich bibliotek? Zobaczmy, jak sprawuje się Ruby we współpracy z Postgresem. Prosty kod przerobiony z z przykładu dostarczanego wraz z modułem do Postgresa dla Ruby'ego:
     #! /usr/bin/env ruby     require 'postgres'     conn = PGconn.connect(nil, nil, nil, nil, "postgres")   res = conn.exec("BEGIN")   res.clear   res = conn.exec("DECLARE chlopaki CURSOR FOR select * from test1")   res.clear     res = conn.exec("FETCH ALL in chlopaki")   if (res.status != PGresult::TUPLES_OK)     raise PGerror,"FETCH ALL command didn't return tuples properlyn"   end     for fld in res.fields     printf("%-15s",fld)   end   printf("nn")     res.result.each do |tupl|         tupl.each do |fld|           printf("%-15s",fld)         end         printf("n")       end   res = conn.exec("CLOSE chlopaki")   res = conn.exec("END")   res.clear   conn.close  
...zadziała bez problemu:
[postgresu1@darkstar sample]$ ruby xm.rb name age Joachim 9 Alcest 10
Na koniec niespodzianka: Pod adresem     http://easter.kuee.kyoto-u.ac.jp/~hiwada/ruby/  można znaleźć eksperymentalny kompilatori i JIT(x86) dla Ruby'ego.
Archiwalny news dodany przez użytkownika: arturs.
Kliknij tutaj by zobaczyć archiwalne komentarze.




