Pętla for..of
to nowy rodzaj pętli. Pętla ta działa tak jak zwykła pętla for..in
przy czym elementy w zmiennej
to nie indeksy jak w przypadku for..in
tylko wartości. Razem z tą pętlą wprowadzono do języka nowy protokół czyli
iteratory oraz cukier syntaktyczny czyli generatory.
powyższy kod wyświetli liczby od 0 do 3. Natomiast:
Razem z pętlą for..of
do języka JavaScript weszło nowe API, które umożliwia napisanie własnego obiektu, który
jest iteratorem. To API nazywane protokołem, wygląda tak, że musimy utworzyć nowy obiekt, który będzie miał iterator
pod kluczem Symbol.iterator
.
Iterator to funkcja, która zwraca obiekt z metodą next
, która z kolei zwraca obiekty:
Wartość done
określa czy iteracja się skończyła, natomiast value
to wartość, która zostanie przypisana
do zmiennej.
Przykład kodu:
Powyższy kod wyświetli liczby od 0 do 10. Iteratory to niskopoziomowe API, aby uprościć ich użycie dodano jeszcze
generatory. Aby utworzyć generator tworzymy nową funkcje z gwiazdką i używamy słowa kluczowego yield
, aby zwracać
elementy. Generator będzie się zatrzymywał za operatorem yield
i wznawiał swoje działanie za nim. Oto przykład:
Warto wspomnieć jeszcze o operatorze yield z gwiazdką, czyli yield*
służy on do „odpakowywania” innego generatora
wewnątrz generatora.
Funkcja wyświetli 21 losowych liczb (10 - 3) * 3
z coraz mniejszym zakresem.
Wartość zwracana przez generator jest dokładnie taka sama jak nasz pierwszy iterator.
Protokół iteratorów jest zaimplementowane przez wbudowane typy takie jak tablice czy ciągi znaków. Czyli można ich używać z pętlą for..of.
Aby zobaczyć wsparcie dla generatorów oraz iteratorów możesz zajrzeć na stronę can I use, zaimplementowane są w większości przeglądarek, oprócz IE oraz Opera Mini.
Jeśli chcesz się pobawić generatorami i iteratorami, tutaj masz demo na codpen.
Ciekawostką może być że generatory są używane, przez narzędzie Babel, do zaimplementowania async/await, o którym pisałem w drugim wpisie o asynchroniczności.
Komentarze
Hasło, które podasz umożliwi ponowne zalogowanie się i np. usunięcie komentarza, jest dobrowolne. Email jest szyfrowany i używany do wysyłania powiadomień o odpowiedziach do komentarzy oraz do pobierania awatara dzięki usłudze Gravatar.com.