Ruby/Powrót do prostych przykładów: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Szymon wro (dyskusja | edycje)
mNie podano opisu zmian
Szymon wro (dyskusja | edycje)
mNie podano opisu zmian
Linia 22:
<pre>def fact(n)</pre>
 
W pierwszej linii, <tt>def</tt> jest instrukcją służącą do definiowania funkcji (lub, bardziej precyzyjnie, metody;. będziemy rozmawiać więcej oO tym, czym jest metoda będziemy mówić więcej w [[Ruby/Metody|dalszym rozdziale]]). Tutaj, <tt>def</tt> wskazuje, że funkcja przyjmuje pojedynczy argument, nazwany <tt>n</tt>.
 
<pre>if n == 0</pre>
 
<tt>if</tt> służy do sprawdzania warunku. Kiedy warunek jest spełniony, następny fragment kodu jest obliczany;. kiedyW nieprzeciwnym jest,razie obliczane jest cokolwiek co występuje za <tt>else</tt>.
 
<pre>1</pre>
Linia 34:
<pre>else</pre>
 
Jeżeli warunek nie jest spełniony, obliczany jest kod znajdujący się od tego miejsca do <tt>end</tt>.
 
<pre>n * fact(n-1)</pre>
Linia 58:
=== Ł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 odwoływać.
 
<pre>
Linia 78:
</pre>
 
W tym programie jest użyta jest nowa struktura sterująca - <tt>while</tt>. Kod pomiędzy <tt>while</tt> a jej kończącym <tt>end</tt> będzie wykonywany w pętli tak długo jak pewien określony warunek pozostanie prawdziwy. W tym przypadku <tt>guess=STDIN.gets</tt> jest zarówno aktywną instrukcją (pobierającą linię wejściową od użytkownika i zachowującą ją jako <tt>guess</tt>), oraz warunkiem (jeżeli nie ma żadnego wejścia, <tt>guess</tt>, które reprezentuje wartość całego wyrażenia <tt>guess=STDIN.gets</tt>, będzie miało wartość <tt>nil</tt>, która spowoduje przerwanie pętli <tt>while</tt>).
 
<tt>STDIN</tt> oznacza obiekt standardowego wejścia. Zwykle, <tt>guess = gets</tt> robi to samo co <tt>guess = STDIN.gets</tt>.
 
<tt>rand(3)</tt> w linii 2 zwraca losową liczbę w przedziale od 0 do 2. Ta losowa liczba jest użyta do wyciągnięcia jednego elementu z tablicy <tt>words</tt>.
 
W linii 5 czytamy jedną linię ze standardowego wejścia przez metodę <tt>STDIN.gets</tt>. Jeżeli wystąpi EOF (ang. ''end of file'' - koniec pliku) podczas pobierania linii, <tt>gets</tt> zwróci <tt>nil</tt>. Tak więc kod skojarzony z tą pętlą <tt>while</tt> będzie powtarzany dopóki nie zobaczy <tt>^D</tt> (lub <tt>^Z</tt> czy też F6 pod DOS/Windows), co oznacza koniec wejścia (wprowadzania).
 
<tt>guess.chop!</tt> w linii 6 usuwa ostatni znak z <tt>guess</tt>;. wW tym wypadku zawsze będzie to znak nowej linii, gdyż <tt>gets</tt> dodaje ten znak by odzwierciedlić naciśnięcie przez użytkownika klawisza Enter (Return), aleco w naszym przypadku niewypadku jest to potrzebneniepotrzebne.
 
W linii 15 drukujemy tajne słowo (<tt>secret</tt>). Zapisaliśmy to jako wyrażenie <tt>puts</tt> (skrót od ang. "''put string"'' - wrzućdosł. "połóż łańcuch") z dwoma argumentami, które są drukowane jeden po drugim; ale. możnaMożna to zapisać równoważnie z jednym argumentem, zapisując <tt>secret</tt> jako <tt>#{secret}</tt> by było jasne, że jest to zmienna która musido być przetworzonaprzetworzenia, a nie literalne słowo do wydrukowania:
 
<pre>puts "the word is #{secret}."</pre>