Treci la conținutul principal

Ce este

Șablonul Iterator parcurge o colecție fără a dezvălui cum este stocată. Apelantul cere doar elementul următor — dacă datele stau într-un tablou, într-un arbore sau într-o bază de date rămâne privat.

TypeScript are acest șablon integrat. O clasă care definește metoda [Symbol.iterator]() poate fi parcursă cu for...of, iar cel mai simplu mod de a scrie acea metodă este un generator: o funcție marcată cu * care produce valori una câte una prin yield.


Exemplu: parcurgerea unei liste de redare

Lista de redare își păstrează privat tabloul de melodii. Oferă doar [Symbol.iterator](), scris ca generator — stocarea din spate s-ar putea schimba complet fără a strica vreun apelant.

Un generator și for...of

Bucla nu atinge niciodată tabloul din interiorul listei de redare; cere doar melodia următoare și afișează se redă: intro, se redă: strofă, se redă: refren. Înlocuiește tabloul cu o listă înlănțuită sau cu încărcare leneșă, iar această buclă tot va funcționa.

Prompt
Scrie un program TypeScript cu șablonul Iterator: o clasă Playlist care își păstrează tabloul de melodii privat și implementează Symbol.iterator ca generator care produce fiecare melodie. Parcurge lista de redare cu o buclă for...of și afișează fiecare melodie.
Ieșire: program TypeScript și rezultatul capturat

Când să îl folosești

Folosește-l când interiorul colecției trebuie să rămână privat, când parcurgerea nu este banală (arbori, pagini de la un API) sau când ai nevoie de mai multe parcurgeri independente în același timp.

Renunță la el pentru tablouri simple și obiecte Map din codul tău — ele sunt deja iterabile, așa că for...of funcționează direct pe ele.


Avantaje și dezavantaje

Avantaje: stocarea rămâne privată și se poate schimba; fiecare for...of primește propria parcurgere independentă; parcurgerea complicată se scrie o singură dată; un generator este leneș — calculează valoarea următoare doar când i se cere.

Dezavantaje: mai mult cod decât expunerea tabloului; un iterator activ peste o colecție care se schimbă este o sursă clasică de erori subtile.