2006.11_Ruby i środowisko Ruby on Rails_[Programowanie].pdf

(1104 KB) Pobierz
439031531 UNPDF
dla programistów
Ruby on Rails
Ruby i środowisko
Michał Sobczak
Architektura MVC od wielu lat zdobywa coraz więcej zwolenników. Swoją popularność zawdzięcza
prostocie oraz logicznemu podziałowi funkcjonalności aplikacji. Jedną z jej najlepszych implementacji
jest środowisko Ruby on Rails.
Rails główną rolę odgrywa słowo Ruby . Jest
ono nazwą nowoczesnego języka skrypto-
wego, na którym opiera się całe środowi-
sko. Implementuje on najważniejsze aspekty paradyg-
matu programowania obiektowego. Posiada wiele udo-
godnień, takie jak np. wyrażenia regularne. Ruby on Ra-
ils jest połączeniem siły języka i własnych rozwiązań tech-
nologicznych. Jest to próba syntezy i logicznego powiąza-
nia baz danych, szablonów języków znaczników oraz ca-
łej logiki aplikacji. W dalszej części artykułu przedstawi-
my krótką, ale pełną sukcesów historię języka Ruby oraz
środowiska Rails. Wprowadzimy również do programo-
wania w języku Ruby, opierając się na ciekawych przykła-
dach. Jako podstawą obrałem zadanie z konkursów ACM
International Collegiate Programming Contest, aby poka-
zać, że przy rozwiązywaniu trudnych problemów algoryt-
micznych możemy skorzystać z pewnych ułatwień. Nie-
stety, moich przekonań nie podzielają jurorzy tego kon-
kursu, którzy każą tworzyć aplikacje operujące np. na na-
pisach, przy użyciu takich narzędzi jak Java czy język C.
Cóż. Nie mnie oceniać słuszność tego działania, ale wiem,
że im mniej pracy do wykonania, tym więcej czasu zo-
staje dla nas samych. W części poświęconej językowi Ru-
by zajmiemy się standardowymi przykładami z domyśl-
nej instalacji języka. Spróbujemy także nieco swoich sił
z programowaniu graiki OpenGL z wykorzystaniem Ru-
by. Tyle o samym języku. Idąc dalej zajmiemy się środo-
wiskiem Rails. Na początek będzie to krótkie wprowadze-
nie do tematyki. Poznamy najważniejsze pojęcia odnośnie
O autorze
Autor jest programistą, jednak nie chciałby wiązać z pro-
gramowaniem swojej dalszej kariery. Bardziej odpowia-
da mu rola specjalisty czy też konsultanta. W swojej do-
tychczasowej działalności pracował w kilku irmach zaj-
mujących się tworzeniem oprogramowania. Ponadto ma
w swoim dorobku książkę o tematyce Ruby on Rails dla
jednego z największych wydawnictw w Polsce. Jest au-
torem kilku artykułów o Ruby on Rails dla dużych cza-
sopism z branży IT. Prowadzi szkolenia z Ruby on Rails
pod szyldem e-irma.biz.
60
listopad 2006
Ruby on Rails
N ie jest przypadkiem, że w nazwie Ruby on
439031531.041.png 439031531.042.png 439031531.043.png 439031531.044.png
 
dla programistów
Ruby on Rails
Rysunek 1. Aplikacja TimeTracker służąca do zarządzania irmowych czasem
jako alternatywę dla Perla. W kolekcji portów
dla systemu FreeBSD znalazłem ciekawy inter-
preter, o którym wiedziałem bardzo niewie-
le, a właściwie to nic. Kiedy już zapoznałem
się z interpreterem i składnią języka, przy-
szedł czas na Ruby on Rails. Był to wymóg
rynku pracy: środowisko to niezbyt mnie in-
teresowało, gdyż dobrze znałem PHP, co mi
dotąd wystarczało. Warto wiedzieć, że dla
PHP także istnieją różne środowiska MVC,
ale siła PHP nie tkwi w nich, a w prosto-
cie programowania w samym języku. Korzy-
stając z PHP, łatwo poradzimy sobie zarów-
no za małym, jak i dużym projektem. Abstra-
hując od PHP, kiedy zobaczyłem możliwo-
ści Ruby on Rails, zdecydowałem, że może
to być szansa dla mnie. Szansa na poznanie
bardzo wartościowego środowiska, oczywiś-
cie dodatkowo dołączając znajomość języka
Ruby.
Jakiś czas temu, gdy pracowałem nad du-
żym projektem w języku PHP, przyszedł mi
do głowy pewien pomysł. Związany był on
z koniecznością stosowania AJAX i nielubia-
nego przeze mnie (i wielu innych programi-
stów) języka JavaScript. Formularze oraz ich
dynamiczne uzupełnianie w wielu krokach
wygląda w efekcie końcowym bardzo im-
ponująco. Jednak ich tworzenie zdecydowa-
nie nie należy do przyjemności. To, co moż-
na zrobić w PHP i AJAX w godzinę, w Rail-
sach zajmie nam góra kilkanaście minut. Sto-
sując połączenie stronicowania, metod komu-
nikujących się między sobą oraz opakowania
dla AJAX, możemy wykonać niebywałe rze-
czy. Wspomniany projekt został wykonany
w całości za pomocą PHP. Próbując samemu
w domu zaadaptować kod PHP, to co zajęło
doświadczonym programistom pół dnia, mnie
wykorzystując Railsy kilkadziesiąt minut. Po-
dany przykład przemawia do wyobraźni, nie-
stety głównie kierowników projektów, a nie
programistów. Im więcej kodu tym więcej pra-
cy, taka specyika rynku.
MVC i samych Railsów, czyli między innymi
Active Record, Acion Controller, Action Ma-
iler oraz Action View. Bardzo modne ostat-
nimi czasy stało się korzystanie z AJAX, tak-
że i w przypadku Rails mamy do dyspozycji
bardzo ciekawe rozwiązanie odnośnie tego.
Poznamy jak szybko, profesjonalnie oraz cał-
kiem wydajnie tworzyć rozbudowaną aplika-
cję internetową wykorzystując do tego mimi-
num zdolności programistycznych oraz zale-
dwie kilka prostych poleceń. Będzie to pro-
jekt aplikacji, która swoim działaniem przy-
pominać będzie blog.
dziedzinach IT, rozpoczęła na dobre proces
produkcji swojego własnego interpretera Ru-
by. Jest to JRuby – projekt Open Source, któ-
ry niebawem zostanie zaadaptowany do wir-
tualnej maszyny, która do tej pory znana by-
ła głównie z obsługi języka Java. Po dodaniu
JRuby do JVM, nazwa prawdopodobnie zo-
stanie zmieniona na samo VM. Będzie to du-
ży sukces języka Ruby, który swoją popula-
ność w dużej mierze zawdzięcza środowisku
Ruby on Rails.
Podobieństwa
do innych języków
Lingwistycznie, Ruby opiera się na kilku in-
nych językach, takich jak SmallTalk, Lisp, Eif-
fel oraz w dużej mierze także Perl. Jest wiele za-
pożyczeń z innych interpreterów oraz kilka no-
wych i całkiem ciekawych rozwiązań. Pierw-
sze trzy języki, na których opiera się Ruby,
mogą czytelnikom niezbyt wiele mówić. Lisp
w języku angielskim oznacza seplenienie i chy-
ba tak też powinniśmy odbierać ten język. Nie-
którzy specjaliści od lingwistyki twierdzą, że
Lisp jest najpotężniejszym język stworzonym
przez człowieka. Specjaliści od języka Perl,
twierdzą natomiast, że Lisp nadaje się do roz-
wiązywania problemów typu „wkręcanie ża-
rówki”. Sprzeczności tego typu wynikają z wie-
lu czynników, o których napiszę może innym
razem. W kilka słowach można określić Lisp ja-
ko język akademicki o skomplikowanej i trud-
nej do nauki składni. Jest wiele dialektów języ-
ka Lisp i może właśnie one są bardziej przydat-
ne w obecnych czasach. Przykładem może być
Dylan, czy Common Lisp. Osobiście nie jestem
fanem Lispa, ale Perl jest mi bardzo bliski. Za-
wiera w sobie wiele rozwiązań, które są blis-
kie osobie, która lubi niewiele programowania
a bardzo dużo efektów. Tak samo jest w przy-
padku Ruby.
Wstęp do języka Ruby
Ruby powstał w połowie lat dziewięćdziesią-
tych. Jego twórcą jest Yukihiro Matsumoto,
japoński programista. Pierwszy interpreter
został opublikowany po długim rozwijaniu
jego pierwotnych wersji. Warto wspomnieć
już w tym momencie, że Ruby jest w Japonii
bardziej popularny od Pythona. Sam Python
jest językiem preferowanym przez rynkowe-
go giganta, jakim jest Google. Świadczy to
o wielu sprawach, takich jak możliwości i per-
spektywy rozwoju. Mówiąc o dwóch ostat-
nich, irma Sun, światowy potentat w wielu
Listing 1. Aplikacja zliczająca wystąpienia słów
w pliku
# word occurrence listing
# usage: ruby freq.rb ile..
freq = Hash.new ( 0 )
while line = gets ()
line.scan ( /\w+/ ) do |word|
freq [ word ] += 1
end
end
for word in freq.keys.sort !
print word , " -- " , freq [ word ] , " \n "
end
Moja przygoda z Ruby i Railsami
Osobiście na trop Ruby traiłem całkiem przy-
padkiem. Zastanawiałem się, co warto poznać
Rysunek 2. Aplikacja OpenGLw języku Ruby
www.lpmagazine.org
61
439031531.001.png 439031531.002.png 439031531.003.png 439031531.004.png 439031531.005.png 439031531.006.png 439031531.007.png 439031531.008.png 439031531.009.png 439031531.010.png 439031531.011.png 439031531.012.png 439031531.013.png 439031531.014.png
 
dla programistów
Ruby on Rails
Porównanie Rails do PHP
i HTML
Weźmy na pierwszy ogień przykład formula-
rza. Ręczne tworzenie go w HTML-u oznacza
wpisywanie dużych ilości kodu. Ruby on Ra-
ils w tym względzie odejmuje nam dużo pra-
cy i oferuje kilka poleceń, za pomocą których
możemy z łatwością, a nawet przyjemnością,
tworzyć skomplikowane formularze.
Rysunek 3. Efekt mgły w OpenGL (plik fog.rbw )
<option value="dwa">dwa</option>
<option value="trzy"> trzy
</option>
<option value="cztery">cztery
</option>
</select>
<%= number_to_currency(234.56,
:unit => "CAN$", :precision => 0) %>
text_ield(:variable,
:attribute, options)
hidden_ield(:variable,
:attribute, options)
password_ield(:variable,
:attribute, options)
text_area(:variable,
:attribute, options)
Wynikiem tego przykładu będzie cena w po-
staci:
CAN$235
Zadziwiające? Z pewnością zastanawiacie się
jak ja, dlaczego w innych językach i środowi-
skach MVC nie jest to normą. Jestem ciekaw,
czy Czytelnik miał kiedykolwiek problem ze
stronicowaniem wyników zapytań z bazy da-
nych przy użyciu języka PHP. Stronicowanie
polega na podzieleniu większej ilości danych
na jednej stronie na kilka mniejszych. Aby sko-
rzystać z wbudowanego mechanizmu stro-
nicowania w Ruby on Rails, niezbędne jest wy-
konanie bardzo niewielu czynności. Plik kon-
trolera, czyli cała logika naszej aplikacji, wy-
glądałaby następująco:
Formatowanie numeru telefonu wraz z nu-
merem kierunkowym od dziś jest równie
proste jak formatowanie cen w dolarach ka-
nadyjskich:
W powyższym przykładzie tworzymy pola
tekstowe, ukryte, hasła oraz obszar tekstowy.
Możemy przekazywać do tych metod rożne
parametry oraz określać, gdzie będzą prze-
chowywane wprowadzane dane. Idąc dalej
w stronę formularzy, łatwo zauważyć, że czę-
sto stosowanym elementem jest pole wyboru.
Oto najprostsze z możliwych rozwiązań:
<%= number_to_phone(2125551212,
:area_code => true, :delimiter =>
" ") %>
wynik: (212) 555 1212
Sądze, że te kilka przykładów przekona-
ło Was, że warto rozważyć na poważnie od-
stawienie języka PHP i całkowite przerzuce-
nie się na Railsy.
<%= select(:user, :name, %w{ jeden
dwa trzy cztery }) %>
def user_list
@user_pages, @users =
paginate(:users, :order_by
=> 'name')
end
Kod ten, umieszczony pomiędzy znacznika-
mi znanymi z języków PHP i ASP, tworzy
pole wyboru. Nowym elementem jest dla nas
%w{} . Jest to operator tworzenia tablic składa-
jących się z napisów. Zamiast nałogowo ko-
rzystać ze znaku cudzysłowia lub apostrofu,
wystarczy elementy tablicy oddzielać spacją.
Warto docenić to udogodnienie. Prezentowa-
ny kod tworzy w języku HTML następujący
fragment.
Railsy w projektach
komercyjnych
Ruby on Rails jest coraz częściej stosowane
w dużych projektach komercyjnych i open-
sourcowych. Zaprezentujemy kilka z nich,
zarówno komercyjnych, jak i niekomercyj-
nych.
Natomiast szablon HTML, który byłby odpo-
wiedzialny za wyświetlenie danych prezen-
tuje się tak:
<table>
<tr><th>Name</th></tr>
<% for user in @users %>
<tr><td><%= user.name %></td>
<% end %>
</table>
<hr>
<%= pagination_links(@user_pages)
%>
<hr>
Listing 3. Przykład z liczbą PI
<select id="user_name"
name="user[name]">
<option value="jeden">jeden</
option>
#!/usr/local/bin/ruby
k , a , b , a 1 , b 1 = 2 , 4 , 1 , 12 , 4
loop do
# Next approximation
p , q , k = k * k , 2 * k + 1 , k + 1
a , b , a 1 , b 1 = a 1 , b 1 , p * a + q * a 1 , p * b + q * b 1
# Print common digits
d = a / b
d 1 = a 1 / b 1
while d == d 1
print d
$stdout.lush
a , a 1 = 10 * ( a%b ) , 10 * ( a 1 %b 1 )
d , d 1 = a /b, a1/ b 1
end
end
Listing 2. Obliczanie silni
def fact ( n )
return 1 if n == 0
f = 1
n.downto ( 1 ) do |i|
f *= i
end
return f
end
print fact ( ARGV [ 0 ] .to_i ) , " \n "
Czyż to nie wspaniałe? Zamiast głowić się, jak
wykonać podział większej ilości danych, wy-
starczy wykorzystać wbudowany w Railsy me-
chanizm, nic więcej. Kiedyś miałem także pro-
blemy z formatowaniem dat, numerów tele-
fonów oraz cen produktów. Jest to poważny
problem, jeśli mamy w ofercie sklepu dolary
amerykańskie, kanadyjskie, euro lub złotówki.
Z częścią z nich możemy sobie poradzić.
62
listopad 2006
439031531.015.png 439031531.016.png 439031531.017.png 439031531.018.png 439031531.019.png
 
dla programistów
Ruby on Rails
TimeTracker jest aplikacją służącą do zarzą-
dzania czasem. Możemy stosować ją do okre-
ślania przeznaczonego czasu na wykonywa-
ne zadania. Aplikacja posiada zdeiniowa-
nych użytkowników oraz logowanie do syste-
mu. Możemy określać projekty, klientów oraz
zadania i czas na ich wykonania. Aplikacja jest
niemal wzorcowych przykładem zastosowa-
nia Ruby on Rails (Rysunek 1).
Witryna www.moto-ok.com jest przykładem
aplikacji internetowej odgrywającej rolę serwi-
su ogłoszeniowego. Na jej stronach możemy
zamieszczać oferty kupna lub sprzedaży mo-
tocykli. Cross, Enduro, Quad i wiele innych in-
teresujących rodzajów maszyn znajduje się w
ofercie na tej stronie. Ich zdeiniowanie zajęło
twórcy zapewne jedynie kilka minut.
Substruct to platforma typu e-commerce.
Składa się z panelu administratora, systemu
zarządzania treścią, działu zamówień oraz
zarządzania produktami. Dostępne są także
takie opcje jak różnego rodzaju płatności oraz
rozbudowany dział kontaktu z klientami.
Przykłady można wymieniać godzinami.
Pełna lista najciekawszych, profesjonalnych
i godnych uwagi aplikacji znajduje się na oi-
cjalnej stronie Ruby on Rails. Lista ta jest cały
czas dostępna jest pod adresem http://wiki.ruby
onrails.org/rails/pages/RealWorldUsage . Z pewno-
ścią warto ją dokładnie przejrzeć, być może my
sami zdecydujemy się na zastąpienie JSP czy też
PHP na naszej irmowej czy też prywatnej stro-
nie. Lista projektów niekomercyjnych a przy-
najmniej opartych na licencji Open Source znaj-
duje się pod adresem http://wiki.rubyonrails.org/
rails/pages/OpenSourceProjects .
W USA istnieje już wiele irm specjalizujących
się w tworzeniu aplikacji internetowych wyko-
rzystując w tym celu Rails. W Polsce aktywność
społeczności jeszcze nie jest zbyt duża.Jest zale-
dwie kilka osób, które są popularyzatorami za-
równo języka Ruby, jak i środowiska Ruby on
Rails. Osobiście próbuję się znaleźć w roli popu-
laryzatora. Przychodzi to jednak z dość dużym
trudem. Aktywność grupy pl.comp.lang.ruby nie
jest oszałamiająca, więc nie można powiedzieć,
że jest to zjawisko na niesamowitą skalę. Na
pewno istnieje jednak określona grupa zapaleń-
ców, którzy mimo wszelkich niedogodności bę-
dą korzystać z Rails.
Podstawy języka Ruby
Zakładam, że czytelnik ma podstawową wie-
dzę z zakresu programowania. Będzie to nie-
zbędnę do analizy krótkich aplikacji stworzo-
nych w języku Ruby. Przedstawione przeze
mnie przykłady ocierają się o czystą algorytmi-
kę. Przedstawię jednak także troche tzw. wo-
dotrysków, takich jak programowanie grai-
ki OpenGL z użyciem Ruby. Większość przy-
kładów pochodzi z katalogu ruby/samples/ oraz
ruby/samples/OpenGL-0.23b/samples/opengl/ .
Rysunek 4. Lothar Collatz, niemiecki matematyk
Jest to przykład zupełnie trywialny, jednak
całkowicie obrazuje on omawiany problem.
Czetelnik zapewne zaczął się powoli zasta-
nawiać, jak wykonywać aplikacje korzysta-
jąc z interpretera. Jest to bardzo proste: po za-
instalowaniu interpretera Ruby otrzymujemy
możliwość wykonywania aplikacji w środo-
wisku graicznym poprzez kliknięcie na iko-
ny plików źródłowych. Możemy teżurucho-
mić konsolę systemową i wpisać ruby na-
zwa_aplikacji.rb . Inną możliwością sko-
rzystania z bogatej biblioteki standardowej
Ruby, jest wykorzystanie interaktywnego in-
terpretera IRB. Jest to rozwiązanie połowicz-
ne, ale w zupełności wystarczające dla po-
trzeb testowania aplikacji oraz poznawania
możliwości i składni języka. Żeby uruchomić
Przykład 1 – Występowanie słów w pliku
Jak już kilkukrotnie wspominałem, Ruby to
język będący próbą stworzenia alternatywy
dla Perla oraz wprowadzenia pełnej obiekto-
wości. Tak więc pierwszym przykładem bę-
dzie aplikacja, która zlicza wystąpienia każ-
dego ze słów z pliku (plik freq.rb ). Zobacz Li-
sting 1.
Wstęp do środowiska
Ruby on Rails
Ruby on Rails jest produktem duńskim. Jego
autorem jest David Heinemeier Hansson. Za
początek istnienia Rails przyjmuje się początek
obecnego wieku. Od roku 2003 zdobywa co-
raz większą populaność. Jest to spowodowane
wieloma zaletami, których nie sposób pominąć.
Analiza
Należy się dokładna analiza podanego przy-
kładu. Znak # oznacza komentarz w kodzie,
część ta nie jest wykonywana. Pomija się
wszystko, co występuje po tym znaku, aż do
końca bieżącej linii. Idąc dalej zauważamy,
że na końcach linii zawierających poprawny
od źródłowy, nie ma znaków średnika. Znak
średnika jest często i chyba nawet zbyt często
stosowanym rozwiązaniem, mającym na celu
rozgraniczenie instrukcji jakiegoś języka. Jest
to rozwiązanie podytkowane prawdopodob-
nie rozbieżną interpretacją znaku końca linii.
Różne systemy operacyjne używają w tym
celu innych znaków. Czy jest to sam znak LF ,
czy dodatkowo ze znakiem CR , jest to w tym
momencie nieistotne. Ruby radzi sobie w tą
kwestią świetnie i używanie średnika jest je-
dynie konieczne i uzasadnione, jeśli chcemy
w jednej linii umieścić wiele instrukcji, jedna
po drugiej, przykładowo:
Listing 4. Inicjalizacja OpenGL w języku Ruby
( ... )
GLUT :: Init () ;
GLUT :: InitDisplayMode ( GLUT :: SINGLE
|
GLUT :: RGB | GLUT :: DEPTH ) ;
GLUT :: CreateWindow () ;
myinit () ;
GLUT :: ReshapeFunc ( myReshape ) ;
GLUT :: DisplayFunc ( display ) ;
GLUT :: MainLoop () ;
print 'tak'; print 'nie'
Rysunek 5. Nowy wpis w blogu
www.lpmagazine.org
63
439031531.020.png 439031531.021.png 439031531.022.png 439031531.023.png 439031531.024.png 439031531.025.png 439031531.026.png 439031531.027.png 439031531.028.png 439031531.029.png 439031531.030.png 439031531.031.png 439031531.032.png 439031531.033.png 439031531.034.png 439031531.035.png
 
dla programistów
Ruby on Rails
Listing 5. Rozwiązanie problemu Collatza
gularnych króluje niewątpliwie Perl. Dobrymi
narzędziami sa ponadto Sed, Awk, Grep oraz
między innymi Ruby. Wyrażenie line.scan(/
w+/) oznacza „dla każdego słowa”. Występu-
je tutaj tak zwany iterator. Jest to konstrukcja
znana nawet użytkownikom języka C++. Sto-
sując w tym języku wyliczenia enum oraz pętlę
for , możemy stworzyć coś bardzo podobnego
do powyższego przykładu. W tym przypadku
jednak jest to o niebo prostsze. Stosując wyra-
żenia regularne, przykładowo wzorzec /w+/ ,
nie musimy dzielić linii, wyszukiwać każdego
słowa ręcznie, umieszczać ich w tablicy, stoso-
wać pętli do przejścia po tej tablicy itp. Jest to
duże usprawnienie pracy z tekstem. W naszej
pętli while występuje słowo do . Możemy je za-
stąpić klamrą, jeśli chcemy, nie ma tutaj więk-
szych ograniczeń:
class Collatz
def initialize
zeruj
end
def zeruj
@max = 0
end
def sprawdz ( linia )
tablica = Array.new
tablica = linia.split
tablica.each do |liczba|
if liczba.to_i >= 1 _ 000 _ 000 ||
liczba.to_i <= 0
puts "Error : #{linia} is
invalid"
exit
end
end
if tablica.size != 2 then
puts "Error : #{tablica.size}
elements!"
exit
end
@x = tablica [ 0 ] .to_i
@y = tablica [ 1 ] .to_i
end
def oblicz
@x.upto ( @y ) do |i|
n = i
ile = 0
until n == 1 do
if n % 2 == 0
n = n / 2
ile = ile + 1
else
n = 3 * n + 1
ile = ile + 1
end
end
if ile > @max
@max = ile
end
end
puts " #{@x} #{@y} #{@max+1}"
end
def generuj_wynik ( dane )
sprawdz ( dane )
oblicz
end
end
collatz = Collatz.new
while tekst = gets () do
collatz.generuj_wynik ( tekst )
end
while line = gets()
line.scan(/\w+/) { |word|
freq[word] += 1
}
end
Zmienna pomiędzy znakami pionowych linii
to zmienna lokalna przyjmująca przy każd-
nym przejściu iteracji kolejne wartości z ite-
rowanego zasobu, czyli przykładowo, każdej
kolejnej pobieranej od użytkownika linii. Do-
stęp do elementów tablicy asocjacyjnej uzy-
skujemy stosując słowo jako indeks:
IRB, wpisujemy w konsoli irb . Uruchomi się
nam powłoka, której podczas pracy możemy
przekazywać polecenia zgodne ze składnią
języka. Dane wynikowe będą prezentowane
na bieżąco. IRB jest w pewnych sytuacjach je-
dynym sensownym rozwiązaniem.
Wracając do naszej przykładowej aplika-
cji: występuje w niej kilkanaście bardzo cieka-
wych konstrukcji. Są to między innymi tablice
asocjacyjne, pętle iteracyjne, iteratory oraz wy-
rażenia regularne. Prześledźmy zatem wszyst-
ko po kolei.
co to wszystko w praktyce oznacza? Powyższy
kod tworzy tablicę asocjacyjną, w której będą
przechowywane liczby wyrażające ilość wy-
stapień danego słowa. Indeksami każdej liczby
będą kolejno następnujące po sobie słowa.
for word in freq.keys.sort!
print word," -- ",freq[word],"\n"
end
while line = gets()
line.scan(/\w+/) do |word|
freq[word] += 1
end
end
Listing 6. Sekcja Development pliku
database.yml
development :
adapter : mysql
database : blog
username : root
password :
host : localhost
test :
adapter : mysql
database : blog
username : root
password :
host : localhost
production :
adapter : mysql
database : blog
username : root
password :
host : localhost
freq = Hash.new(0)
Powyżej mamy zwyczajną pętlę while . Pętla ta
wykonuje się dopóty, dopóki zachowany jest
jej warunek. W tym przypadku wykonuje się
ona, dopóki użytkownik aplikacji wprowadza
jakiś tekst z klawiatury. Za warunek możemy
przyjąć tutaj: line = gets() . Metoga gets()
pobiera dane z klawiatury. Każdy blok w ję-
zyku Ruby kończy się słowem end. Jest to je-
dyne słowo z kategorii ozdobników w tym ję-
zyku. Nie mamy tutaj klamr, słów typu begin ,
czy też konieczności używania tabulacji, jak
w Pythonie.
Bardzo ważną częścią każdego profesjo-
nalnego języka skryptowego są wyrażenia re-
gularne. Czy są one wbudowane, czy istnieją
jako osobna biblioteka, stanowią one podstawę
w pracy z tekstem. W dziedzinie wyrażeń re-
Konstrukcja ta stworzy tablicę asocjacyjną o na-
zwie freq poprzez wywołanie metody new dla
klasy Hash . Tablice asocjacyjne są to takie tabli-
ce, w których za indeks możemy wziąźć nie
tylko liczby, ale i tekst. Metoda jest natomiast
odpowiednikiem funkcji czy też procedur z ję-
zyków niższego poziomu niż Ruby, takich jak
C czy Pascal. Metoda to funkcja w klasie. Kla-
sa to zbior metod i parametrów, czyli kolejno,
funkcji i zmiennych lub stałych. Klasy służą do
modelowania świata abstrakcji. Można je za-
stosować do odwzorowania rzeczywistości
lub też aspektów abstrakcyjnych, które istnie-
ją jedynie logicznie, a nie izycznie. Tyle teorii,
64
listopad 2006
439031531.036.png 439031531.037.png 439031531.038.png 439031531.039.png 439031531.040.png
 
Zgłoś jeśli naruszono regulamin