Softmush.com, teknoloji, yazılım ve dijital dünyaya dair derinlemesine içeriklerle bilgiye ulaşmanın güvenilir adresi. - Softmush.com
“ Söz konusu olan vatansa, gerisi teferruat. ”
Mustafa K. Atatürk
PHP Dilinde Üreteçler (Generators) Kullanımı

PHP Dilinde Üreteçler (Generators) Kullanımı

PHP dilinde üreteçler (generators), özellikle büyük veri setleriyle çalışırken bellek tüketimini ve performansı optimize etmek amacıyla tasarlanmış güçlü bir özelliktir. Geleneksel olarak, bir dizi veya koleksiyon üzerinde döngü oluşturmak için tüm veriyi belleğe yüklemeniz gerekebilir. Ancak üreteçler, veriyi talep üzerine (on-demand) tek tek üreterek bu sorunu ortadan kaldırır. Bu sayede, tüm veri setini belleğe yüklemeden üzerinde yinelenebilir bir yapı oluşturulur ve böylece çok daha verimli bir kaynak kullanımı sağlanır. Üreteçler, özel bir tür yineleyici (iterator) olarak işlev görür ve `yield` anahtar kelimesi ile tanımlanır.

Sözdizimi


PHP'de bir üreteç fonksiyonu tanımlamak, standart bir fonksiyona benzer, ancak değer döndürmek için `return` yerine `yield` anahtar kelimesi kullanılır.

function generatorFunction(): Generator


{


    yield $value;


    // veya


    yield $key => $value;


}


Detaylı Açıklama


Yukarıdaki sözdiziminde yer alan ana bileşenler ve işlevleri aşağıda açıklanmıştır:
  • function generatorFunction(): Generator: Bu kısım, bir üreteç fonksiyonunun tanımlandığını belirtir. Fonksiyon adı herhangi bir geçerli PHP fonksiyon adı olabilir. PHP 7.0 ve sonrası için dönüş tipi ipucu olarak Generator kullanılabilir, bu fonksiyonun bir üreteç döndüreceğini açıkça belirtir.


  • yield $value;: Üreteçlerin kalbinde yer alan anahtar kelimedir. Bir fonksiyon içerisinde yield ifadesi kullanıldığında, PHP bu fonksiyonu otomatik olarak bir üreteç fonksiyonu olarak tanır. yield, fonksiyonun yürütülmesini duraklatır, belirtilen $value değerini çağırana geri döndürür ve fonksiyonun mevcut durumunu (yerel değişkenler, yürütme noktası vb.) korur. Bir sonraki değer istendiğinde, fonksiyon kaldığı yerden yürütülmeye devam eder.


  • yield $key => $value;: yield ifadesi, anahtar-değer çiftleri döndürmek için de kullanılabilir, tıpkı bir dizideki gibi. Bu, özellikle değerlerin belirli bir anahtarla ilişkilendirilmesi gereken durumlarda faydalıdır.


Bir üreteç fonksiyonu çağrıldığında, kodu hemen yürütülmez. Bunun yerine, bir Generator nesnesi döndürür. Fonksiyonun kodu ancak bu nesne üzerinde döngüye başlandığında (örneğin bir foreach döngüsü ile) adım adım yürütülür ve yield ifadeleri aracılığıyla değerler üretilir.


Pratik Kullanım Örnekleri


Aşağıdaki örnekler, üreteçlerin farklı senaryolarda nasıl kullanılabileceğini göstermektedir.

Örnek 1: Basit Sayı Dizisi Üreteci


Bu örnek, belirli bir aralıktaki sayıları üreten basit bir üreteç fonksiyonunu göstermektedir.

Örnek 2: Büyük Dosyaları Satır Satır Okuma


Büyük bir metin dosyasını belleğe tamamen yüklemeden satır satır okumak için üreteçler idealdir.

Örnek 3: Veritabanı Kayıtlarını Bellek Dostu Şekilde İşleme


Bir veritabanından çok sayıda kayıt çekerken, tüm sonuç setini belleğe yüklemek yerine üreteçler kullanarak kayıtları tek tek işleyebilirsiniz. (Bu örnek bir veritabanı bağlantısı gerektirdiğinden basitleştirilmiştir.)
 $i, 'ad' => 'Kullanıcı ' . $i, 'email' => 'kullanici' . $i . '@example.com'];
    }

    echo "Veritabanı bağlantısı kapatılıyor..." . PHP_EOL;
}

// Sadece 3 kayıt işleyelim
foreach (veritabaniKayitlari(3) as $kayit) {
    echo "İşlenen kayıt ID: " . $kayit['id'] . ", Ad: " . $kayit['ad'] . PHP_EOL;
}

// Çıktı:
// Veritabanı bağlantısı açılıyor...
// Kayıt 1 çekiliyor...
// İşlenen kayıt ID: 1, Ad: Kullanıcı 1
// Kayıt 2 çekiliyor...
// İşlenen kayıt ID: 2, Ad: Kullanıcı 2
// Kayıt 3 çekiliyor...
// İşlenen kayıt ID: 3, Ad: Kullanıcı 3
// Veritabanı bağlantısı kapatılıyor...

?>

Önemli Notlar ve İpuçları


Üreteçler hakkında bilmeniz gereken bazı önemli noktalar ve ipuçları aşağıda listelenmiştir:
  • Bellek Verimliliği: Üreteçlerin en büyük avantajı bellek verimliliğidir. Tüm veri setini belleğe yüklemek yerine, değerleri talep üzerine ürettikleri için büyük dosyaları veya veritabanı sonuçlarını işlerken çok daha az bellek kullanırlar.


  • Tek Kullanımlık Yapı: PHP'deki üreteçler, ileriye dönük (forward-only) yineleyicilerdir. Bir üreteç üzerinde döngü tamamlandığında, genellikle en başa dönüp tekrar yinelemek mümkün değildir. Eğer tekrar kullanım gerekiyorsa, üreteç fonksiyonunu tekrar çağırmanız gerekir.


  • yield from Kullanımı: PHP 7.0 ile birlikte gelen yield from ifadesi, bir üreteçten başka bir üretece veya Traversable nesneye yetki devretmeyi sağlar. Bu, birden fazla iç içe üreteci tek bir yerden yönetmek için kullanışlıdır.


  • İstisna Yönetimi: Üreteç fonksiyonları içinde istisnalar fırlatılabilir ve bunlar normal fonksiyonlarda olduğu gibi yakalanabilir. Üreteç, bir istisna fırlattığında veya sonlandığında, artık daha fazla değer üretmez.


  • Dönüş Değeri: PHP 7.0 ve sonrası ile üreteçler, return ifadesi ile bir nihai değer döndürebilir. Ancak bu değere doğrudan foreach döngüsü üzerinden erişilemez. Generator::getReturn() metodu ile erişilebilir ve genellikle yield from ile birlikte kullanılır.


Yayınlanma Tarihi: 2025-10-16 20:00:53
Python Dilinde Python Sets Kullanımı
Önceki Haber

Python Dilinde Python Sets Kullanımı

Python Makaleleri
Sonraki Haber

HTML Dilinde Favicon Kullanımı: Kapsamlı Rehber

HTML Makaleleri
HTML Dilinde Favicon Kullanımı: Kapsamlı Rehber

Yorum yap

Yorum yapabilmek için  giriş  yapmalısınız.

Yorumlar

Bu yazı hakkında henüz yorum yapılmamıştır.
× PHP Dilinde Öntanımlı Değişkenler Kullanımı
Bu ilginizi çekebilir

PHP Dilinde Öntanımlı Değişkenler Kullanımı

PHP geliştiricileri için öntanımlı değişkenler, web uygulamalarının kalbinde yer alan...