Day 25

Iterators & Generators

14 min
JavaScript 100 Days

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.

iterator.js
javascript
// 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.js
javascript
// 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.