Iterator
Iterator to obiekt umożliwiający sekwencyjny dostęp do elementów w kontenerze, takich jak lista. Jego podstawowe operacje to dostęp do konkretnego elementu oraz możliwość przeglądania kolejnych elementów. Iterator musi mieć możliwość wskazania na pierwszy element oraz rozpoznawania, kiedy wszystkie elementy zostały przetworzone.
Porównanie z Indeksowaniem
W językach proceduralnych, iteracja po elementach często odbywa się za pomocą indeksowania, co może być nieodpowiednie dla niektórych struktur danych. Iteratory oferują kilka korzyści:
- Jednorodny sposób iteracji, co poprawia czytelność i uniwersalność kodu.
- Możliwość nałożenia ograniczeń na dostęp do elementów.
- Umożliwiają modyfikację kolekcji w trakcie iteracji bez problemów związanych z indeksowaniem.
Iteratory Domyślne
W niektórych językach, jak Perl i Python, dostępne są wbudowane mechanizmy do iteracji. Przykłady:
foreach $val (@list) {
print „$val\n”;
}
for value in sequence:
print(value)
Generatory
Generatory są specyficznym rodzajem iteratorów, które umożliwiają przetwarzanie elementów jednej po drugiej, nawet w przypadku nieskończonych kolekcji. Często są stosowane w językach funkcyjnych.
Iteratory w Różnych Językach Programowania
C++
W C++ iteratory są integralną częścią biblioteki STL, umożliwiając iterację za pomocą operatorów arytmetyki wskaźników. Iteratory są zazwyczaj używane w parach: jeden do iteracji, drugi do oznaczania końca kolekcji.
Java
Od wersji 1.2 Java wprowadza interfejs java.util.Iterator
, który pozwala na iterację po kolekcjach. Metody next()
i hasNext()
są kluczowe do działania iteratorów w tym języku.
Python
Iteratory w Pythonie są powszechnie używane i często niewidoczne, gdyż są automatycznie wykorzystywane w pętlach for
. Użytkownicy mogą również definiować własne iteratory przy pomocy metod __iter__()
i next()
.
JavaScript
W ES6 JavaScript wprowadza protokół iteratorów oraz generatory. Umożliwia to łatwą iterację po tablicach oraz ciągach znaków.
Sather
W Sather iteratory są zaawansowanym typem obiektu, pozwalającym na równoczesne wykorzystanie wielu iteratorów w pętli.