ECMAScript 6 taslak spesifikasyonu, modern JavaScript geliştiricisi için şimdiden birçok mutluluk kaynağı sağladı. Önceki bir gönderide bazı yeni koleksiyon sınıflarını ve for..of
yineleme döngüsünü ele aldık. Bu yayında, for..of
döngüleriyle birlikte kullanılan bir şeyden bahsedeceğiz: oluşturucu işlevleri.
Jeneratörleri neden ve nasıl kullanacağınızı açıklayan muhteşem materyaller vardır. Özetle, oluşturucular yiteratörler oluşturan özel işlevlerdir; yinelemeler ise bir değer elde etmek için çağrılabilecek next()
yöntemine sahip nesnelerdir. Oluşturucu işlevinde, yield
anahtar kelimesi next()
değerini sağlar. yield
kullanılması, oluşturucu işlevinin yürütülmesini askıya alır. next()
tekrar çağrılana kadar durumu korur. Bu noktada kod, tekrar başlar ve başka bir değeri yield
yapana kadar (veya oluşturucu işlevi sonlandırılana kadar) devam eder. Oluşturucu işlevleri için, Fibonacci dizisindeki sayıları yinelemek üzere kullanmak gibi çeşitli standart kullanım alanları vardır.
Temel bilgileri aradan çıkardığımızda, oluşturucularla çalışmanın bazı yönlerini kapsayan bir JavaScript örneğiyle daha ayrıntılı bir şekilde başlayalım. Bölümün tamamı boyunca kapsamlı yorumlar bulunmaktadır. Ayrıca, okumadan önce kodun canlı versiyonu üzerinde değişiklik yapabilirsiniz:
Peki bu koddan çıkarılacak önemli dersler nelerdir?
İlk olarak, bir oluşturucu oluşturulduğunda, kendi durumuna sahip benzersiz bir iteratör ortaya çıkar ve parametreleri, davranışı kontrol edebilen oluşturucu oluşturucuya aktarabilirsiniz.
İkinci olarak, bir iteratörün next()
yöntemini çağırırken bir parametre aktarabilirsiniz. Bu değer, önceki yineleme çağrısından yield
ifadesinin sol tarafındaki değere atanır. Bu, iteratörün çıktısını değiştirmenin harika bir yoludur. Burada, elde edilen kelimenin büyük harfli olup olmadığını kontrol etmek için onu kullanırız. Elde edilen ilk değeri etkilemek istiyorsanız, oluşturucunun kurucusuna gönderilen bir parametre aracılığıyla bunu yapın.
Son olarak, oluşturucular sonlu veya sonsuz yinelemeler üretebilir. Bir sonsuz yinelemeyle çalışıyorsanız yield
ed değerine bağlı bir tür terminal koşulunuz olduğundan emin olun. Özellikle iterasyon için for..of
kullanılırken yanlışlıkla sonsuz döngüler yazmak çok kolaydır. next()
için yapılan çağrılar aracılığıyla sonlu bir yinelemeyle çalışıyorsanız yinelemenin tamamlanıp tamamlanmadığını bildiren nesnenin .done
özelliği.
Web'deki diğer kaynaklarla birlikte bu örneğin, heyecan uyandıracağını ve kendi kodunuzda oluşturucuları nasıl kullanabileceğiniz konusunda size fikir vereceğini umuyoruz. Firefox'un 31 ile başlayan ve yerel olarak 39 destek oluşturucudan başlayan Chrome sürümleri. Regenerator projesi, diğer tarayıcılar için oluşturucu desteği sunar. Traceur'un kullanımı da bir seçenektir.
Bu makaleyi inceleme konusundaki yardımları için Erik Arvidsson'a teşekkür ederiz.