Ruby/Struktury sterujące: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
Szymon wro (dyskusja | edycje) Nie podano opisu zmian |
Szymon wro (dyskusja | edycje) Nie podano opisu zmian |
||
Linia 28:
<tt>case</tt> wewnętrznie używa operatora relacji <tt>===</tt> by sprawdzić kilkanaście warunków za jednym razem. W odniesieniu do obiektowej natury Rubiego, <tt>===</tt> jest interpretowany odpowiednio dla obiektu który pojawia się jako warunek w instrukcji <tt>when</tt>. Na przykład, następujący kod sprawdza równość łańcuchów znakowych w pierwszym wyrażeniu <tt>when</tt> oraz zgodność wyrażeń regularnych w drugim <tt>when</tt>.
<source lang="ruby">
def okresl(s)
case s
end
okresl("abcdef") #=> zawiera /def/
</source>
=== while ===
Linia 46 ⟶ 48:
<pre>
To jest zero.
1
2
3
</pre>
Linia 64 ⟶ 66:
Są cztery sposoby do przerywania wykonywania pętli z jej wnętrza. Pierwszy, <tt>break</tt> oznacza, tak jak w C, zupełną ucieczkę z pętli. Drugi, <tt>next</tt>, przeskakuje na początek kolejnej iteracji (podobnie jak znane z C <tt>continue</tt>). Trzeci, to specyficzne dla Rubiego <tt>redo</tt>, które oznacza ponowne wykonanie bieżącej iteracji. Następujący kod w języku C ilustruje znaczenia instrukcji <tt>break</tt>, <tt>next</tt>, i <tt>redo</tt>:
<source lang="cpp">
while (warunek) {
etykieta_redo:
Linia 76 ⟶ 78:
etykieta_break:
...
</
Czwarty sposób by wyjść z pętli będąc w jej wnętrzu to <tt>return</tt>. Obliczenie instrukcji <tt>return</tt> spowoduje wyjście nie tylko z pętli ale również z metody która tę pętlę zawiera. Jeżeli podany został argument, będzie on zwrócony jako rezultat wywołania metody. W przeciwnym wypadku zwracane jest <tt>nil</tt>.
Linia 84 ⟶ 86:
Programiści C mogą się zastanawiać jak zrobić pętlę "<tt>for</tt>". Petla <tt>for</tt> Rubiego może służyć w ten sam sposób, choć jest nieco bardziej elastyczna. Pętla poniżej iteruje każdy element w kolekcji (tablicy, tablicy asocjacyjnej, sekwencji numerycznej, itd.), ale nie zmusza programisty do myślenia o indeksach:
<source lang="ruby">
for
# ...
end
</
Kolekcją może być przedział wartości (to właśnie większość ludzi ma na myśli, gdy mówi o pętli <tt>for</tt>):
<source lang="ruby">
#=> 456
</source>
W tym przykładzie przeiterujemy kilka elementów tablicy:
<source lang="ruby">
| puts "#{elem}\t(#{elem.class})"
| end
#=>
# -9.6 (Float)
# zalewa (String)
</
Ale
Jeżeli przywykłeś do C lub Javy, możesz preferować tą.
<source lang="ruby">
for element in kolekcja
...
end
</
Natomiast programista Smalltalka może preferować taką.
<source lang="ruby">
kolekcja.each {|element|
...
}
</
Iteratory często mogą być używane zamiast konwencjonalnych pętli. Jak już nabierzesz wprawy w ich użyciu, stają się zazwyczaj łatwiejsze w od pętli. Zatem ruszmy się dalej i dowiedzmy się o nich czegoś więcej.
|