ECMAScript 6 taslak spesifikasyonu, modern JavaScript geliştiricileri için birçok yenilik getirdi. Bazı yeni koleksiyon sınıflarını ve for..of
iterasyon döngülerini önceki bir yayında ele almıştık. Bu yayında, for..of
döngüleriyle birlikte kullanılan bir konu olan üretken işlevlerden bahsedeceğiz.
Jeneratörlerin neden ve nasıl kullanıldığını anlatan harika içerikler mevcuttur. Özetlemek gerekirse, üreticiler iterator oluşturan özel işlevlerdir ve iterator'lar, bir değer elde etmek için çağrılabilecek next()
yöntemine sahip nesnelerdir. Bir oluşturucu işlevinde yield
anahtar kelimesi next()
değerini sağlar. yield
kullanıldığında, üretken işlevin yürütülmesi duraklatılır ve next()
tekrar çağrılana kadar durum korunur. Bu noktada kod yeniden başlar ve başka bir değer yield
olana (veya üretken işlev sona erene) kadar devam eder. Oluşturucu işlevlerin birkaç standart kullanım alanı vardır. Örneğin, Fibonacci dizisindeki sayıları iterasyonla işlemek için bu işlevleri kullanabilirsiniz.
Temel bilgileri öğrendikten sonra, üretkenlerle çalışmanın bazı zorluklarını veya "zorlu kısımlarını" kapsayan bir JavaScript örneğiyle ayrıntılı olarak inceleyelim. Kodda ayrıntılı açıklamalar yer alır. Kodu okumadan önce canlı sürümüyle denemeler yapabilirsiniz:
Kodla ilgili önemli noktalar nelerdir?
Öncelikle, bir üreteç oluşturmak kendi ayrı durumuna sahip benzersiz bir iteratör oluşturur. Ayrıca, üreteç oluşturucuya davranışı kontrol edebilecek parametreler iletebilirsiniz.
İkinci olarak, bir iteratör next()
yöntemini çağırırken bir parametre iletebilirsiniz. Bu değer, önceki iteratör çağrısındaki yield
ifadesinin sol tarafındaki öğeye atanır. Bu, iteratör çıkışını değiştirmenin mükemmel bir yoludur. Burada, döndürülen kelimenin büyük harfli olup olmadığını kontrol etmek için bu yöntemi kullanıyoruz. Elde edilen ilk değeri etkilemek istiyorsanız bunu, üretecin kurucusuna bir parametre ekleyerek yapın.
Son olarak, üreticiler sonlu veya sonsuz iteratör üretebilir. Sonsuz bir iteratörle çalışıyorsanız yield
ed değerine dayalı bir tür sonlandırma koşulunuz olduğundan emin olun. Özellikle iterasyon için for..of
kullanıldığında, sonsuz döngüler yazılması çok kolaydır. next()
çağrıları aracılığıyla sonlu bir iteratörle çalışıyorsanız döndürülen nesnenin .done
mülkü, iterasyonun tamamlanıp tamamlanmadığını belirtir.
Bu örneğin ve web'deki diğer kaynakların, üreteçleri kendi kodunuzda nasıl kullanabileceğinizi düşünmenizi sağlayacağını umuyoruz. Firefox 31 ve Chrome 39 sürümlerinden itibaren üreticiler doğal olarak desteklenir. Regenerator projesi, diğer tarayıcılar için oluşturucu desteği sunar. Traceur'u kullanmak da bir seçenektir.
Bu makalenin incelenmesine yardımcı olan Erik Arvidsson'a teşekkürler.