Builder

web application developer blog

PHP generator function – yield

Python’u yada C#’ı iyi bilenler, daha başlığı okuduklarında, aa PHP’de de mi yield var demişlerdir. Evet PHP de de yield var ama 5.5 versiyonundan itibaren var. Yani daha yeni eklendi sayılır. yield’i yeni duyanlar için örneklerle yield nedir nasıl kullanılır anlatayım. Bunu yaparken en sevdiğim eğitim metodu olan “Bilinenden bilinmeyene” metodunu kullanacağım.

Efendim, PHP de fonksiyon yazmayı biliyoruz. Fonksiyonların herhangi biryerde sonlanması ve/veya geriye değer döndürmesi için de return  kullanıdığımızı biliyoruz. İşte yield tıpkı return gibi geriye değer döndürür ama return‘den farklı olarak fonksiyonu sonlandırmaz. Özetle değer üretir. Bu  nedenle de yield‘li fonksiyonlara üreteç (generator) denir.

Çoğu programcı için teroik tanımlamalar laf kalabilığından ibarettir. Örneksiz öğrenme olmaz. Hemen örnek verelim.

Bir çift sayı üreteci oluşturalım:

yani burada amaç kodu daha fazla parçalayarak daha basit yapılar elde etmek. Böylece anlaşılabilirliği artırmak. Elbette yield çif sayı üretmekten çok daha karmaşık işler için kullanılmalı.

 

Bir diğer örneği projecteuler.org’un 3 numaralı problemi üzerinde verelim. Problemi daha önce şu blog‘da çözmüştük zaten. Aynı mantıkla generator fonksiyon oluşturacak olursak:

Şimdi programın çıktısına bakalım:

Çalışma süresini, daha önceki çözümümüz ile kıyasladığımızda arada bariz bir performans kaybı olduğunu görüyoruz. Yani PHP’de yield “henüz” kullanılabilecek kadar gelişmiş değil.

Şurada PHP’nin kendi sitesindeki bir üreteç fonksiyon örneği ve performans karşılaştırması var.

Bizim ise elimizden gelen tek şey, PHP 7 ile birlikte daha performanslı üreteç fonksiyon geliştirebilmeyi ümidetmek!

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir