Day 25 Iterators & Generators
Iterator ek object hai jo sequence mein values provide karta hai. Generator function ek special function hai jo values ek ek karke yield karta hai — useful for lazy evaluation aur infinite sequences.
Iterators
Iterator protocol implement karo — next() method jo {value, done} return kare.
// Custom iterator
function createRange(start, end) {
let current = start;
return {
next() {
if (current <= end) {
return { value: current++, done: false };
}
return { value: undefined, done: true };
},
[Symbol.iterator]() { return this; }
};
}
let range = createRange(1, 5);
for (let num of range) {
console.log(num); // 1, 2, 3, 4, 5
}
// Arrays, Strings are already iterable
for (let char of "Hello") {
console.log(char); // H, e, l, l, o
}
Generator Functions (function*)
Generator function* se values ek ek yield karo. Execution pause aur resume hoti hai.
// Generator function
function* count(start, end) {
for (let i = start; i <= end; i++) {
yield i; // pause here, value return karo
}
}
let gen = count(1, 3);
console.log(gen.next()); // { value: 1, done: false }
console.log(gen.next()); // { value: 2, done: false }
console.log(gen.next()); // { value: 3, done: false }
console.log(gen.next()); // { value: undefined, done: true }
// Spread ke saath
console.log([...count(1, 5)]); // [1, 2, 3, 4, 5]
// Infinite sequence
function* infiniteIds() {
let id = 1;
while (true) yield id++;
}
let idGen = infiniteIds();
console.log(idGen.next().value); // 1
console.log(idGen.next().value); // 2
🎯 Practice Challenge
fibonacci() generator function banao jo Fibonacci sequence yield kare. Pehle 10 numbers print karo for...of se.