Sonsuz generator'lar
Sonsuz dizi üreten generator'ları ve sonlu döngüde kullanmayı öğrenirsin.
Sonsuz generator
while (true) ile sonsuz değer üreten bir generator yazabilirsin. Bellek dolmaz çünkü tek seferde tek değer üretilir; önceden hesaplanan değerler saklanmaz.
Sonsuz bir generator'ı sonlu bir döngüde kullanmak için break ile durdurur ya da sabit sayıda adım alırsın. Aksi halde foreach sonsuza kadar gider.
Sonsuz generator'ı sonlu kullan
Sonsuz bir generator'ı foreach ile yinlersen döngü hiç durmaz. break ile belli bir koşulda durdurursun; örneğin belli sayıda değer aldıktan sonra.
Bu sayede sonsuz akıştan yalnızca istediğin kadarını kolayca alırsın. Generator durur ve bellek boşalır; geriye kalan değerler hiç hesaplanmaz.
Uygulama naturals ile ilk 5 sayı
naturals(): \Generator fonksiyonu yaz: 1'den başlayıp while (true) ile sonsuz sayı üret, her yield'den sonra sayıyı bir artır. foreach ile naturals() yinele; ilk 5 sayıyı yazdır, sonra break ile dur.
Örnek çözümü göster
naturals fonksiyonunda $n = 1 ile başla, while (true) içinde yield $n; sonra $n++. foreach (naturals() as $n) ile yinele, bir $count sayacı tut; $count >= 5 olunca break.
Örnek çözüm:
<?php
function naturals(): \Generator {
$n = 1;
while (true) {
yield $n;
$n++;
}
}
$count = 0;
foreach (naturals() as $n) {
echo $n . "\n";
$count++;
if ($count >= 5) {
break;
}
}
Kendini test et
-
while (true) ile sonsuz generator çağrılınca ne olur?
- Bellek taşana kadar tüm değerler üretilir
- Hiç değer üretilmez
- Yalnızca ilk değer döner
- Her istekte bir değer üretilir, sonsuza kadar
Cevabı göster
Her istekte bir değer üretilir, sonsuza kadar — Doğru. Generator tembel çalışır; her istekte tek değer üretilir, bellek dolmaz.
-
naturals generator'ında sonsuz döngü
function naturals(): \Generator { $n = 1; ____ { yield $n; $n++; } }Cevabı göster
function naturals(): \Generator { $n = 1; while (true) { yield $n; $n++; } } -
Sonsuz generator kavramlarını eşleştir
- while (true)
- Sonsuz döngü başlatır
- yield
- Her döngüde bir değer üretir
- break
- Döngüyü durdurur
- foreach
- Generator'ı yineler