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) Nie podano opisu zmian |
||
Linia 80:
W tym programie 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>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>.
Linia 88:
<tt>guess.chop!</tt> w linii 6 usuwa ostatni znak z <tt>guess</tt>. W 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), co w naszym wypadku jest niepotrzebne.
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'' - dosł. "połóż łańcuch") z dwoma argumentami, które są drukowane jeden po drugim. Moż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 do przetworzenia,
<pre>puts "the word is #{secret}."</pre>
Wielu programistów uważa, że utworzenie
Również my
<pre>
Linia 112:
</pre>
Jeden słaby punkt: czasami okno tekstowe z powodu prędkości działania posiada buforowane wyjście. Poszczególne znaki są buforowane i wyświetlane dopiero gdy pojawi się znak przejścia do nowej linii. Więc, jeżeli skrypt naszej zgadywanki nie pokazuje zachęty dla użytkownika dopóki użytkownik nie poda odpowiedzi, niemal na pewno winne jest buforowanie. Aby upewnić się, że tak się nie stanie możesz wyświetlić (ang. ''flush'' - dosł. "wylać") wyjście jak tylko zostanie wydrukowana zachęta dla użytkownika. <tt>flush</tt> mówi standardowemu urządzeniu wyjściowemu (obiekt nazwany <tt>STDOUT</tt>), "nie czekaj
<pre>
Linia 120:
</pre>
I rzeczywiście,
=== Wyrażenia regularne ===
Linia 142:
</pre>
W linii 6 w warunku dla pętli <tt>while</tt> zakodowana jest "na sztywno" wartość <tt>true</tt>, co w efekcie daje nam nieskończoną pętlę. Aby więc przerwać wykonywanie pętli umieściliśmy instrukcje <tt>break</tt> w liniach 8 i 10. Te dwie instrukcje są również przykładem
W liniach 7 i 9 mamy "nie-destruktywny" <tt>chop</tt>
<pre>
Linia 159:
</pre>
Czasem będziesz też widział w użyciu <tt>chomp</tt> i <tt>chomp!</tt>. Te dwa są bardziej selektywne: końcówka łańcucha jest obcinana tylko wtedy, gdy jest znakiem końca linii. Dla przykładu, <tt>"XYZ".chomp!</tt> nie
Pozostałe konwencje nazywania metod pojawiają się w liniach 8 i 10. Znak zapytania (<tt>?
Linia 11 tworzy obiekt będący wyrażeniem regularnym z łańcucha podanego przez użytkownika. Cała właściwa praca wykonywana jest wreszcie w linii 12, która używa <tt>gsub</tt> do globalnego podstawienia każdego
<pre>
Linia 179:
</pre>
Spójrz ponownie na ostatnią część linii 12. <tt>st</tt> i <tt>en</tt> były zdefiniowane w liniach 1-2 jako sekwencje ANSI które odpowiednio zmieniają i przywracają kolor tekstu. W linii 12 są one zawarte w <tt>#{}</tt> by
<noinclude>
{{ProstaNawigacja|spis=Ruby|poprzart=Ruby/Tablice|poprz=Tablice|nastart=Ruby/Struktury sterujące|nast=Struktury sterujące}}
|