CodeBlanks Logo Icon CodeBlanks

Sonsuz generator'lar

PHP kursu · Uzman · Ders 4/54

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

  1. 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.

  2. 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++;
        }
    }
    
  3. 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

Uzman bölümündeki tüm dersler