Ruby/Iteratory: 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 1:
== Iteratory ==
Iteratory nie są oryginalnym pojęciem Rubiego. Są one w powszechnym użyciu w językach zorientowanych obiektowo. Występują również w Lispie, choć nie są tam nazywane iteratorami. Jednakże koncepcja iteratorów jest wielu osobom obca, więc tutaj zostanie one wyjaśniona nieco bardziej szczegółowo.
Linia 24 ⟶ 26:
Wszystkie pliki źródłowe i nagłówkowe języka C w bieżącym katalogu są przetwarzane i powłoka systemowa bierze na siebie detale dotyczące wskazywania i podstawiania po kolei wszystkich nazw plików, jedna po drugiej. To chyba działa na wyższym poziomie niż C, nie sądzisz?
Trzeba zauważyć jeszcze
Tak więc każdy język wspierający OOP zawiera jakieś udogodnienia do iterowania. Niektóre języki dostarczają w tym celu specjalnych klas; Ruby pozwala na definiowanie iteratorów bezpośrednio.
Linia 50 ⟶ 52:
... jednakże, iterator ''each_byte'' jest koncepcyjnie prostszy, jak i wydaje się, że działałby nadal nawet gdyby klasa ''String'' uległa w przyszłości radykalnym modyfikacjom. Dużą zaletą iteratorów jest to, że zachowują one swoje poprawne działanie na przekór takim radykalnym zmianom; i w rzeczy samej, jest to charakterystyczna cecha dobrego kodu w ogólności. (Tak, miej cierpliwość, niebawem będziemy mówić również o tym czym są klasy.)
<pre>
Linia 60 ⟶ 62:
</pre>
Zadania które pochłonęły by większość wysiłku w C (wyszukiwanie ograniczników linii, generowanie podłańcuchów, itd.) z użyciem iteratorów mogą być łatwo rozwiązane.
Instrukcja ''for'' pojawiająca się w [[Ruby/Struktury sterujące|poprzednim rozdziale]] dokonywała iteracji przez użycie iteratora ''each''. Iterator ''each'' klasy String działa w ten sam sposób jak ''each_line'', więc przepiszmy powyższy przykład z ''for'':
<pre>
Linia 74 ⟶ 76:
</pre>
Możemy używać struktury sterującej ''retry'' w połączeniu z iterowaną pętlą. Powoduje ona rozpoczęcie iterowania pętli od początku.
<pre>
|