CodeBlanks Logo Icon CodeBlanks

Generator fonksiyonlar

JavaScript kursu · İleri seviye · Ders 48/100

function* ile generator tanımlamayı ve generator nesnesini öğrenirsin.

Generator fonksiyonlar

Bir generator, çağrıldığında tüm değerleri üretmek yerine çağıran tarafından adım adım tüketilen özel bir işlevdir. function* sözdizimi ile tanımlanır; yıldız işareti bu işlevin normal bir işlev değil, bir generator olduğunu belirtir.

function* counter() {
  yield 1;
}
const gen = counter();

Generator çağrıldığında kod hemen çalışmaz. Bunun yerine, yürütme durumunu saklayan bir generator nesnesi döner. Bu nesne, üretilecek değerleri tek tek istemek için kullanılır.

function* ve normal fonksiyon farkı

Normal bir işlev çağrıldığında gövdesi hemen çalışır ve bir değer döner. Bir generator ise çağrıldığında gövdesini çalıştırmaz; bunun yerine bir generator nesnesi döndürür. Kod, ancak .next() çağrıldığında adım adım yürütülür.

function* greeter() {
  yield 'merhaba';
}
const g = greeter();
g.next(); // { value: 'merhaba', done: false }

Bu tembel davranış, büyük veya sonsuz dizilerde bellek tasarrufu sağlar.

Uygulama İlk generatorunu yaz

counter adında bir generator fonksiyonu yaz. İçine bir yield 1 ifadesi ekle. gen adında bir generator nesnesi oluştur. console.log(gen.next()) çağrısı ile sonucu yazdır.

Örnek çözümü göster
function* counter() {
  yield 1;
}
const gen = counter();
console.log(gen.next());

Kendini test et

  1. Hangisi geçerli bir generator fonksiyon tanımıdır?

    • function counter*() {}
    • function generator counter() {}
    • function* counter() {}
    • generator function counter() {}
    Cevabı göster

    function* counter() {} — Doğru! function* sözdizimi generator tanımlamanın standart yoludur.

  2. Generator nesnesini oluştur

    function* counter() { yield 1; }
    const gen = ____;
    Cevabı göster
    function* counter() { yield 1; }
    const gen = counter();
  3. Generator kavramlarını eşleştir

    function*
    generator tanımlar
    generator nesnesi
    next() döndürür
    lazy
    çağrılınca çalışır

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