Ruby/Proste przykłady
Proste przykłady
[edytuj]Napiszmy funkcję obliczającą silnię. Matematyczna definicja silni n to:
n! = 1 (gdy n==0) = n * (n-1)! (w innym przypadku)
W Rubim możemy ją napisać w następujący sposób[1]:
def silnia(n)
if n == 0
1
else
n * silnia(n-1)
end
end
Warto zauważyć powtarzające się wyrażenie end. Ruby nazywany jest przez to "algolopodobnym" językiem programowania. Właściwie, składnia Rubiego bardziej przypomina inny język - Eiffel. Można także zauważyć brak wyrażeń return. Nie są one potrzebne, ponieważ funkcja w Rubim zwraca ostatnią wartość, która była w niej liczona. Używanie wyrażenia return jest dozwolone, lecz niepotrzebne.
Wypróbujmy naszą funkcję silni. Dodanie jednej linii kodu daje nam działający program:
# Program, który liczy wartość silni z danej liczby
# Zapisz go jako silnia.rb
def silnia(n)
if n == 0
1
else
n * silnia(n-1)
end
end
puts silnia(ARGV[0].to_i)
ARGV jest tutaj tablicą zawierającą argumenty linii poleceń, a to_i konwertuje łańcuch na liczbę całkowitą.
% ruby silnia.rb 1 1 % ruby silnia.rb 5 120
Czy nasz program zadziała z argumentem 40? Nie policzymy tego na kalkulatorze...
% ruby silnia.rb 40 815915283247897734345611269596115894272000000000
Działa! Ruby może sobie poradzić z każdą liczbą całkowitą, która zmieści się w pamięci naszego komputera. Więc możemy policzyć nawet 400!:
% ruby silnia.rb 400 64034522846623895262347970319503005850702583026002959458684 44594280239716918683143627847864746326467629435057503585681 08482981628835174352289619886468029979373416541508381624264 61942352307046244325015114448670890662773914918117331955996 44070954967134529047702032243491121079759328079510154537266 72516278778900093497637657103263503315339653498683868313393 52024373788157786791506311858702618270169819740062983025308 59129834616227230455833952075961150530223608681043329725519 48526744322324386699484224042325998055516106359423769613992 31917134063858996537970147827206606320217379472010321356624 61380907794230459736069956759583609615871512991382228657857 95493616176544804532220078258184008484364155912294542753848 03558374518022675900061399560145595206127211192918105032491 00800000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000
Nie możemy natychmiastowo sprawdzić poprawności obliczeń, ale muszą być prawidłowe. :-)
Pętla wejście/obliczenie i sposób prezentacji przykładów
[edytuj]Kiedy wywołasz Rubiego bez argumentów, interpreter wczyta komendy ze standardowego wejścia i wykona je po zakończeniu wprowadzania:
% ruby puts "witaj swiecie" puts "zegnaj swiecie" ^D witaj swiecie zegnaj swiecie
Znak ^D powyżej oznacza Ctrl+D, wygodny sposób sygnalizowania, że wprowadzanie zostało zakończone w systemach uniksowych. W DOS/Windows spróbuj użyć F6 lub ^Z.
Ruby zawiera również program zwany irb, który pomaga wprowadzać kod bezpośrednio z klawiatury w interaktywnej pętli, pokazując na bieżąco rezultaty.
Oto krótka sesja z irb:
% irb irb(main):001:0> puts "Witaj, swiecie." Witaj, swiecie. => nil irb(main):002:0> exit
"Witaj swiecie" jest wypisane przez puts. Następna linia, w tym przypadku nil, pokazuje cokolwiek, co zostało obliczone jako ostatnie. Ruby nie rozróżnia instrukcji i wyrażeń, więc obliczanie kawałka kodu jest równoważne z jego wykonaniem. Tutaj, nil oznacza, że puts nie zwraca żadnej (znaczącej) wartości. Zauważ, że możemy opuścić pętlę interpretera przez wpisanie exit.
W naszym podręczniku będziemy korzystać z programu irb oraz z przykładów zapisanych bezpośrednio jako kod źródłowy. Rezultat działania takiego kodu (wyjście), będziemy podawać jako komentarz, stosując oznaczenie: #=>. (Co to jest komentarz możesz sprawdzić tutaj.) Alternatywnie, będziemy czasem przedstawiać sesję z naszym kodem jako zapis okna terminala.
Przypisy
- ↑ Aby ułatwić zrozumienie, kod źródłowy we wszystkich przykładach został przetłumaczony na język polski (identyfikatory, łańcuchy znakowe, komentarze). Ponieważ Ruby w wersji stabilnej nie obsługuje jeszcze w pełni standardu Unicode, polskie znaki diaktryczne zostały zamienione na ich łacińskie odpowiedniki (ś na s, ł na l, itd...). Należy jednak wspomnieć, że powszechnie przyjęte i zalecane jest stosowanie języka angielskiego przy tworzeniu kodu niemalże w każdym języku programowania.