জাভাস্ক্রিপ্টে ইটারেটরগুলির একক-বার ব্যবহার
প্রতিটি ইটারেটর মাত্র একবার লুপে অংশ নিতে পারে। এটি কিছুটা অপ্রত্যাশিত, কিন্তু যৌক্তিক - কারণ একবার শেষ হয়ে গেলে ইটারেটরটি তার doneকে false-এ সেট করে, যার অর্থ এটি আর পুনরাবৃত্তি করা যাবে না।
আসুন এটি যাচাই করি। ধরা যাক আমাদের নিম্নলিখিত জেনারেটর রয়েছে:
function *func() {
yield 1;
yield 2;
yield 3;
}
চলুন একটি ইটারেটর তৈরি করি:
let iter = func();
একটি লুপ দিয়ে ইটারেটরটি পুনরাবৃত্তি করি:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
এখন দুটি লুপ দিয়ে ইটারেটরটি পুনরাবৃত্তি করি:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // কাজ করে না
}
সমস্যার সমাধান করার জন্য প্রতিটি নতুন লুপের জন্য আমাদের নিজস্ব ইটারেটর তৈরি করতে হবে:
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
}
আমরা সরলীকরণ করতে পারি:
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
নিম্নলিখিত কোডে করা ভুলটি সংশোধন করুন:
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);
}