Ruby/Powrót do prostych przykładów: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
m +nav |
|||
Linia 22:
<pre>def fact(n)</pre>
W pierwszej linii, '''def''' jest instrukcją służącą do definiowania funkcji (lub, bardziej precyzyjnie, metody; będziemy rozmawiać więcej o tym czym jest metoda w dalszym rozdziale). Tutaj, '''def''' wskazuje, że funkcja przyjmuje pojedynczy argument, nazwany '''n'''.
<pre>if n == 0</pre>
'''if''' służy do sprawdzania warunku. Kiedy warunek jest spełniony, następny fragment kodu jest obliczany; kiedy nie jest, obliczane jest cokolwiek co występuje za '''else'''.
<pre>1</pre>
Wartość '''if''' wynosi 1 jeżeli warunek jest spełniony.
<pre>else</pre>
Jeżeli warunek nie jest spełniony, obliczany jest kod znajdujący się od tego miejsca do '''end''
<pre>n * fact(n-1)</pre>
Jeżeli warunek nie jest spełniony, wartość wyrażenia '''if''' wynosi '''n''' razy '''fact(n-1)'''.
<pre>end</pre>
Pierwszy '''end''' zamyka instrukcję '''if'''.
<pre>end</pre>
Drugi '''end''' zamyka instrukcję '''def'''.
<pre>puts fact(ARGV[0].to_i)</pre>
Ta linia wywołuje naszą funkcję '''fact()''' używając wartości z linii poleceń oraz wypisuje wynik.
'''ARGV''' jest tablicą, która zawiera argumenty z linii poleceń. Elementy '''ARGV''' są łańcuchami znakowymi, więc aby dokonać konwersji na liczby całkowite używamy metody '''to_i'''. Ruby nie zamienia łańcuchów na liczby automatycznie tak jak Perl.
Co się stanie jeśli podamy naszemu programowi liczbę ujemną? Widzisz problem? Umiesz go rozwiązać?
=== Łańcuchy znakowe ===
Teraz zbadamy nasz program - łamigłówkę z rozdziału o [[Ruby/Łańcuchy znakowe|łańcuchach znakowych]]. Ponieważ jest on nieco długi, ponumerujmy linie by móc się łatwo do nich odnieść.
<pre>
01 words = ['foobar', 'baz', 'quux']
02 secret = words[rand(3)]
Linia 74 ⟶ 76:
14 end
15 puts "the word is ", secret, "."
</pre>
'''STDIN'''
'''rand(3)'''
guess.chop! in line 6 deletes the last character from guess; in this case it will always be a newline character, gets includes that character to reflect the user's Return keystroke, but we're not interested in it.
|