JavaScript'te Yineleyicilerin Tek Seferlik Çalışması
Her yineleyici bir döngüde yalnızca
bir kez yer alabilir. Bu biraz beklenmedik,
ancak mantıklı - çünkü tamamlanan bir yineleyici
kendi done değerini false olarak ayarlar,
bu da artık üzerinde yeniden döngü yapılamayacağı anlamına gelir.
Bunu görelim. Aşağıdaki jeneratöre sahip olduğumuzu varsayalım:
function *func() {
yield 1;
yield 2;
yield 3;
}
Bir yineleyici oluşturalım:
let iter = func();
Yineleyiciyi bir döngü ile geçelim:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
Şimdi yineleyiciyi iki döngü ile geçelim:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // çalışmaz
}
Sorunu çözmek için, her yeni döngü için kendi yineleyicinizi oluşturmanız gerekir:
let iter1 = func();
for (let elem of iter1) {
console.log(elem); // 1, 2, 3
}
let iter2 = func();
for (let elem of iter2) {
console.log(elem); // 1, 2, 3
}
Basitleştirebiliriz:
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
Aşağıdaki kodda yapılan hatayı düzeltin:
function *func() {
for (let i = 1; i <= 3; i++) {
yield i;
}
}
let elems = func();
for (let elem of elems) {
console.log(elem);
}
for (let elem of elems) {
console.log(elem);
}