Proste przykłady

Napiszmy funkcję do obliczania silni. Matematyczna definicja n silni:

n! = 1                (gdy  n==0)
   = n * (n-1)!       ( inaczej )

W Ruby można to zapisać jako:

def fact(n)
  if n == 0
    1
  else
    n * fact(n-1)
  end
end

Można zauważyć powtarzające się występowanie end końca. Ruby z tego powodu został nazwany "Algol'o podobnym". (Właściwie składnia języka Ruby bardziej przypomina tą z języka Eiffel) Możesz zauważyć brak instrukcji powrotu (return). Jest ona niepotrzebna ponieważ w Ruby funkcja zwraca ostatnią rzecz która była w niej oceniana. Użycie instrukcji return jest dozwolone tutaj, ale niepotrzebne.

Spróbujmy uruchomić naszą funkcję silni. Dodanie jednej linii kodu daje nam działający program.

# Program do szukania silni z danej liczby
# Zapisz to jako fact.rb

def fact(n)
  if n == 0
    1
  else
    n * fact(n-1)
  end
end

puts fact(ARGV[0].to_i)

Tutaj, ARGV jest tablicą która zawiera argumenty wiersza poleceń i to_i konwertuje ciąg znaków na liczbę całkowitą.

% ruby fact.rb 1
1
% ruby fact.rb 5
120

Może to zadziałać z argumentem 40? Byłby to Twój kalkulator z przepełnieniem...

% ruby fact.rb 40
815915283247897734345611269596115894272000000000

To działa! Doprawdy Ruby może działać z dowolnymi liczbami całkowitymi, które są dozwolone przez pamięć Twojej maszyny. Więc 400! Można obliczyć:

% ruby fact.rb 400
64034522846623895262347970319503005850702583026002959458684
44594280239716918683143627847864746326467629435057503585681
08482981628835174352289619886468029979373416541508381624264
61942352307046244325015114448670890662773914918117331955996
44070954967134529047702032243491121079759328079510154537266
72516278778900093497637657103263503315339653498683868313393
52024373788157786791506311858702618270169819740062983025308
59129834616227230455833952075961150530223608681043329725519
48526744322324386699484224042325998055516106359423769613992
31917134063858996537970147827206606320217379472010321356624
61380907794230459736069956759583609615871512991382228657857
95493616176544804532220078258184008484364155912294542753848
03558374518022675900061399560145595206127211192918105032491
00800000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000

Nie możemy sprawdzić poprawności na pierwszy rzut oka, ale to musi być prawda. :-)

Wejście/Ocena pętli

Gdy odwołasz się do Rubiego bez argumentów, to będzie odczytywał polecenia ze standardowego wejścia, a wykona je po zakończeniu wprowadzania:

% ruby
puts "hello world"
puts "good-bye world"
^D
hello world
good-bye world

Znak ^D powyżej oznacza Ctrl+D, jest to konwencjonalny sposób by wysłać sygnał zakończenia-wejścia w kontekście systemów Unix. W DOS/Windows, spróbuj nacisnąć F6 lub ^Z.

Ruby jest też wyposażony w program o nazwie IRB (Interactive Ruby [dawniej eval.rb]), który pozwala wprowadzać kod ruby z klawiatury do interaktywnej pętli, pokazując Tobie rezultaty w locie. Będzie to szeroko używane w ramach tego przewodnika.

Jeśli masz terminal zgodny z ANSI (co jest napewno prawdą, gdy używasz jakiegoś smaku UNIX'a; pod starsze wersje DOS'a potrzebujesz mieć zainstalowane ANSI.SYS lub ANSI.COM; Windows XP niefortunnie uczynił to prawie niemożliwym), powinieneś użyć tej wzmocnionej irb (eval.rb), który dodaje wizualną pomoc wcięć, raporty ostrzegawcze i kolorowe podświetlenia. W przeciwnym wypadku, należy poszukać w podkatalogu dystrybucji ruby próbki dla wersji non-ANSI która działa na każdym terminalu. Tutaj jest krótka sesja IRB:

% irb
ruby> puts "Hello, world."
Hello, world.
   nil
ruby> exit

Hello world jest produkowany przez puts. Następna linia, w tym przypadku nil, raportuje cokolwiek było ostatnio porównywane; ruby nie rozróżnia instrukcji i wyrażeń, więc ocenia kawałek kodu co znaczy w zasadzie to samo, co jego wykonanie. Tutaj, nil wskazuje że puts nie zwraca znaczącej wartości. Zauważ że możemy opuścić pętlę interpretera poprzez komendę exit, chociaż Ctrl+D też zadziała.

Wszędzie w tym poradniku "ruby>" oznacza znak zachęty dla naszego małego użytecznego programu irb (eval.rb).