Onur Dayıbaşı

CV
none

Generator Nedir ?

Normalde fonksiyonlar 3 şekilde sonlanır.

  • fonksiyonun işleminin tamamlanması.
  • return fonksiyonu sonuç dönmesi
  • throw ile hata dönmesi

Generator fonksiyona sanki bir iterator gibi davranıp, fonksiyon içerisinde akışı durdurup ilerletebildiğiniz bir mekanizmaya dönüştürür. Bu ne demek şimdi. Aşağıdaki fonksiyonda sayHello() fonksiyonunu çağırdığımızda tüm fonksiyon hemen işletilir ve sonuç size döner. Diyebilirsiniz ki async/await fonksiyonları hemen işletilmez. Fonksiyon Async işlem için bekletilir zaten bu fonksiyon tipide Generator yapısı üzerinde çalıştırılır.

1function sayHello(){
2 console.log("Hello");
3 console.log("Word");
4}
5sayHello();

Generator fonksiyonu önünde * ile tanımlayıp içerisinde yield ile akışı kontrol edeceğiniz yerleri belirtip, fonksiyonun akışını dışarıdan .next() ile ilerleterek kullanabilirsiniz.

1function * sayHelloGenerator(){
2 yield console.log("Hello");
3 yield console.log("Word");
4}
5const genHello=sayHelloGenerator();
6genHello.next();
7genHello.next();

Burda 2 fonksiyon türünün işleyişi gösterilmiştir. Birincisinde fonksiyonun işleyişine etki edemezken , generator fonksiyonunda iterator ile programı durdurup ilerletmek bizim kontrolümüzdedir.

Generator

Burda yield return gibi davranır fakat return sadece value dönmez aynı zamanda fonksiyonun tamamlanması ile ilgili sonucuda döner.

1function * sayHelloGenerator(){
2 yield "Hello";
3 yield "World";
4}
5const genHello=sayHelloGenerator();
6console.log(genHello.next());
7console.log(genHello.next());
8console.log(genHello.next());

Program İşletilince çıkan sonuç

Referanslar