Iterator Protocol की जानकारी
In this page:
const iterable = {
[Symbol.iterator](): Iterator<Type> {
return { next: () => ({ value: item, done: false }) };
},
};
Basic Iterator
एक iterator कोई भी ऐसा object है जिसमें एक next method होता है जो value और done properties रखने वाला एक object return करता है — वह single method ही पूरा contract है जो iterator protocol require करता है।
उदाहरण: Basic Iterator
const iterator = {
count: 0,
next() {
this.count++;
return { value: this.count, done: this.count > 3 };
},
};
console.log(iterator.next());
IteratorResult
एक IteratorResult exactly describe करता है कि next क्या return करता है: या तो done: false के साथ paired एक yielded value, या done: true और typically कोई meaningful value न होने के साथ paired एक completed result।
उदाहरण: IteratorResult
function makeCounter(): { next(): IteratorResult<number> } {
let count = 0;
return {
next: () => count < 3 ? { value: count++, done: false } : { value: undefined, done: true },
};
}
const counter = makeCounter();
console.log(counter.next());
Iterable and Iterator
एक iterable object well-known Symbol.iterator key के नीचे एक method provide करता है जो एक iterator return करता है — यह वह specific चीज़ है जो किसी value को for...of, spread operator, और destructuring के साथ उपयोग होने देती है।
उदाहरण: Iterable and Iterator
const range = {
[Symbol.iterator]() {
let n = 0;
return { next: () => n < 3 ? { value: n++, done: false } : { value: undefined, done: true } };
},
};
console.log([...range]);
Manual Iterator Consumption
आप repeatedly next call करके और खुद done flag check करके manually एक iterator consume कर सकते हैं, जो exactly वह है जो for...of आपकी तरफ से under the hood करता है।
उदाहरण: Manual Iterator Consumption
const arr = [1, 2, 3];
const it = arr[Symbol.iterator]();
let result = it.next();
while (!result.done) {
console.log(result.value);
result = it.next();
}
Typed Iterable Classes
एक class generic Iterable<T> interface implement कर सकती है एक properly typed Symbol.iterator method expose करने के लिए, इसके instances को iteration protocol पर बने हर language feature में participate करने देते हुए।
उदाहरण: Typed Iterable Classes
class NumberRange implements Iterable<number> {
constructor(private end: number) {}
[Symbol.iterator](): Iterator<number> {
let n = 0;
const end = this.end;
return { next: () => n < end ? { value: n++, done: false } : { value: undefined, done: true } };
}
}
console.log([...new NumberRange(3)]);
done: trueबहुत जल्दी या कभी return न करना, इसलिए iterator पर एक loop कभी खत्म नहीं होता या last value skip कर देता है।- एक
next()method लिखना जोvalueऔरdoneके साथ एक object return नहीं करता। - सिर्फ
next()वाले एक object परfor...oftry करना, जब इसे एक[Symbol.iterator]()method चाहिए।
Chapter Quiz — Complete all 6 topics to unlock
0/6 topics done
Complete these topics first: