Iterators

در جاوااسکریپت، Iterator یک شیء (object) هست که روشی به نام next() داره. این متد هر بار که صدا زده میشه، مقدار بعدی در مجموعه رو برمی‌گردونه.

Iteratorها پشت‌صحنه برای اجرای for...of استفاده میشن.

🔹 ساختار Iterator

یک Iterator object همیشه شامل متد next() هست.
این متد یک شیء برمی‌گردونه با دو property:

  • value → مقداری که در iteration برگردونده میشه.

  • done → اگر iteration تموم شده باشه true میشه.

🔹 مثال ساده Iterator

function myIterator() { let step = 0; return { next: function() { step++; if (step === 1) { return { value: "Hello", done: false }; } else if (step === 2) { return { value: "World", done: false }; } else { return { value: undefined, done: true }; } } }; } const iterator = myIterator(); console.log(iterator.next()); console.log(iterator.next()); console.log(iterator.next());

📌 خروجی:

{ value: "Hello", done: false } { value: "World", done: false } { value: undefined, done: true }

🔹 استفاده از Iterator روی Array

const numbers = [10, 20, 30]; // ساختن Iterator با Symbol.iterator const iterator = numbers[Symbol.iterator](); console.log(iterator.next()); console.log(iterator.next()); console.log(iterator.next()); console.log(iterator.next());

📌 خروجی:

{ value: 10, done: false } { value: 20, done: false } { value: 30, done: false } { value: undefined, done: true }

🔹 فرق Iterable و Iterator

  • Iterable → داده‌ای که متد Symbol.iterator داره (مثل Array, String, Set).

  • Iterator → شیئی که متد next() داره و مقدارها رو یکی‌یکی برمی‌گردونه.

✅ خلاصه

  • Iterator یک شیء با متد next() هست.

  • متد next() دو چیز برمی‌گردونه: value و done.

  • Iterableها (مثل Array و String) پشت‌صحنه یک Iterator تولید می‌کنن.

  • بدون Iterator، پیمایش داده‌ها با for...of امکان‌پذیر نیست.