CodeBlanks Logo Icon CodeBlanks

yield* ile delegasyon

JavaScript kursu · İleri seviye · Ders 51/100

yield* ile başka bir generator'ı veya iterable'i nasıl delege edeceğini öğrenirsin.

yield* ile delegasyon

yield* (yıldız ile) başka bir generatoru veya iterable'ı delege etmeyi sağlar. İç generatorun tüm değerleri, dış generator tarafından sanki kendi değerleriymiş gibi üretilir. Bu, generatorları birleştirmenin temiz bir yoludur.

function* inner() {
  yield 1;
  yield 2;
}
function* outer() {
  yield* inner();
  yield 3;
}

Buradan gelen değerler: 1, 2, 3 sırasıyla.

Generatorları birleştirme

yield* ile generatorları birleştirebilirsin. Her parça ayrı bir generator olarak kalır; dış generator onları sırayla tüketir. Bu, büyük bir veri akışını küçük parçalara bölmeyi kolaylaştırır.

function* vowels() { yield 'a'; yield 'e'; }
function* consonants() { yield 'b'; yield 'c'; }
function* alphabet() {
  yield* vowels();
  yield* consonants();
}

Sonuç: a, e, b, c — tek bir döngüde tüketilebilir.

Uygulama İki generatoru birleştir

inner adında bir generator yaz: 'a' ve 'b' değerlerini üretsin. outer adında bir generator yaz: yield* inner() ile inner'ı delege etsin, sonra 'c' üretsin. for...of ile outer()'ı gez ve her değeri console.log ile yazdır.

Örnek çözümü göster
function* inner() {
  yield "a";
  yield "b";
}
function* outer() {
  yield* inner();
  yield "c";
}
for (const v of outer()) {
  console.log(v);
}

Kendini test et

  1. yield* ne yapar?

    • Generatoru geçici olarak duraklatır
    • Bir Promise döndürür
    • Yalnızca tek bir değer üretir
    • Başka bir generatoru veya iterable'ı delege eder
    Cevabı göster

    Başka bir generatoru veya iterable'ı delege eder — Doğru! yield* iç generatorun tüm değerlerini dış generatora aktarır.

  2. Delegasyon ifadesini ekle

    function* inner() { yield 1; yield 2; }
    function* outer() {
      ____ inner();
      yield 3;
    }
    Cevabı göster
    function* inner() { yield 1; yield 2; }
    function* outer() {
      yield* inner();
      yield 3;
    }
  3. Delegasyon terimlerini eşleştir

    yield*
    başka generatoru delege eder
    yield
    tek değer üretir
    compose
    generatorları birleştirir

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