CodeBlanks Logo Icon CodeBlanks

Iterator protokolü

JavaScript kursu · İleri seviye · Ders 42/100

next() metodu ve done/value yapısını öğrenirsin.

Iterator protokolü

Bir iterator, içinde next() metodu olan bir nesnedir. next() çağrıldığında JavaScript bir sonuç nesnesi döndürür: { value, done }. value o anki değeri, done ise tükenme durumunu taşır.

Bu düzene iterator protokolü denir. Her çağrı bir sonraki değeri üretir; dizi bitince done: true döner. Böylece JavaScript hangi veri yapısıyla karşılaştığını bilmek zorunda kalmadan her şeyi aynı biçimde gezebilir.

done ve value

done false iken value anlamlıdır: o anki öğeyi taşır. done true olduğunda iterator tükenmiş demektir; value genelde undefined olur ve önemsenmez.

Bu yüzden döngüler önce done değerine bakar. true gelince döngüden çıkar. Elle iterator gezdiğinde sen de aynı denetimi yapmalısın; yoksa tükenmiş iterator sürekli { value: undefined, done: true } döndürür.

Uygulama Sayaç iterator'ü yaz

counter adında bir nesne oluştur. count özelliği 0'dan başlasın. next() metodu her çağrıda count'u 1 artırsın ve { value, done } döndürsün. İlk üç çağrıda done: false, dördüncüde done: true dönsün. Sonra console.log ile üç değeri ve dördüncü çağrının done bilgisini yazdır.

Örnek çözümü göster
const counter = {
  count: 0,
  next() {
    this.count += 1;
    if (this.count <= 3) {
      return { value: this.count, done: false };
    }
    return { value: undefined, done: true };
  }
};
console.log(counter.next().value);
console.log(counter.next().value);
console.log(counter.next().value);
console.log(counter.next().done);

Kendini test et

  1. Bir iterator'ın next() metodu ne döndürür?

    • Bir sayı
    • Bir dizi
    • { value, done } nesnesi
    • Bir fonksiyon
    Cevabı göster

    { value, done } nesnesi — Doğru. next() bir sonuç nesnesi döndürür.

  2. next() sonuç nesnesini tamamla

    const iter = {
      count: 0,
      next() {
        this.count += 1;
        return { value: this.count, ____ };
      }
    };
    console.log(iter.next().done);
    Cevabı göster
    const iter = {
      count: 0,
      next() {
        this.count += 1;
        return { value: this.count, done: false };
      }
    };
    console.log(iter.next().done);
  3. Iterator protokolü kavramları

    next()
    Sonraki değeri döndürür
    value
    Şu anki değeri taşır
    done
    Bitiş bilgisini verir
    iterator
    next() metodu olan nesne

İleri seviye bölümündeki tüm dersler