03.06. Generators

Generators, bir iterasyon yapmanın en kolay yoludur. İterasyon diziden farklı olarak nesne üzerinden yapılır. Generator nesnesi bir generator fonksiyonunda döner. Nesne bir sonraki veriyi üretir. Bu bölüm, çoğu güncel programlama dilinde popüler olan Generator konusuna ayrılmıştır.

Sözdizimi son derece basittir.

* generator olduğunu ifade eder. yield return’den farklı olarak o anda bulunduğu değeri döndürür ve bekler. 2. ve 3. yield’e ulaşmak için next komutuna ihtiyaç vardır. Tüm yield işlemleri tamamlanınca Javascript bir exception üretir. (throw) Eğer son yield değerini döndürmek isterseniz return kullanabilirsiniz. Daha fazla bilgi için tıklayın.

Şimdi basit bir örnekle konuyu açıklayalım. Ben yield’i teker teker çağırmak yerine bir döngü içinde kullanacağım. Çift sayıları üreten ve kaldığı yerden hesaplamalara devam eden bir kod olacak.

ciftsayilar fonksiyonunda sayi değeri başlangıçta sıfırdır, yield ile güncellenir ve o anki sonuç döndürülür. Fonksiyon ikinci, üçüncü ve hatta 10. defa çağrıldığında sonraki sonuçları döndürür. Dizi konusuna çok benziyor diyeceksiniz, hatta bu sonuçları dizi de tutarım ve kolayca dolaşabilirim diyeceksiniz. Ancak, bellek yönetimi açısından generator’ler belleğe çok az yüklenir. Sadece bir fonksiyon ve sayi değişkeni sahiptir. Ancak, dizi belleğe çok yüklenir ve tüm sayıları bellekte tutmak çok maliyetlidir.