Uwongo wa Mara Moja wa Viterushaji katika JavaScript
Kila kiterushaji kiweze kushiriki katika kitanzi
mara moja tu. Hii inashangaza kidogo,
lakini ina mantiki - baada ya yote, kiterushaji kilichopita
hukiweka done yake kuwa false,
na kwa hivyo hakiwezi tena kusomwa.
Hebu tuhakikishe hili. Tuchukulie tuna kizalisaji kifuatacho:
function *func() {
yield 1;
yield 2;
yield 3;
}
Tutengeneze kiterushaji:
let iter = func();
Wacha tusome kiterushaji kwa kitanzi kimoja:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
Sasa tusome kiterushaji kwa vitanzi viwili:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // haifanyi kazi
}
Ili kutatua tatizo inahitajika kwa kila kitanzi kipya kuunda kiterushaji chake:
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
}
Tunaweza kurahisisha:
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
Sahihisha makosa yaliyofanyika katika msimbo ufuatao:
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);
}