Generator sınıfı
Generator sınıfının current(), next() ve send() methodlarını öğrenirsin.
Generator sınıfı methodları
Bir yield içeren fonksiyon çağrılınca Generator nesnesi döner. Generator, Iterator arabirimini uygular; current() şu anki değeri, next() sonrakine geçer, valid() devam edilebilir mi diye bakar.
key() yield'in anahtarını verir; rewind() başa döner (yalnızca yineleme başlamadan önce). Bu methodlarla generator'ı elle yönetebilirsin.
send() ile geri gönderim
send($value) methodu, duran yield ifadesine değer geri gönderir. yield yalnızca değer üretmekle kalmaz, aynı zamanda bir ifade olarak değer alabilir: $received = yield $value;.
Bu sayede generator ile çift yönlü iletişim kurarsın. send('hello') çağrısında 'hello', yield ifadesinin sonucu olur ve yürüme bir sonraki yield'e kadar ilerler.
Uygulama Generator'ı elle yinele
$gen = countUp(5, 8) ile bir generator oluştur. while ($gen->valid()) döngüsü içinde current() ile değeri yazdır, sonra next() ile ilerle.
Örnek çözümü göster
while ($gen->valid()) döngüsü kur. İçinde echo $gen->current() . "\n"; ile şu anki değeri yazdır, sonra $gen->next(); ile ilerle.
Örnek çözüm:
<?php
function countUp(int $from, int $to): \Generator {
for ($i = $from; $i <= $to; $i++) {
yield $i;
}
}
$gen = countUp(5, 8);
while ($gen->valid()) {
echo $gen->current() . "\n";
$gen->next();
}
Kendini test et
-
İlk değeri current() ile al
$gen = countUp(1, 3); echo $gen->____();Cevabı göster
$gen = countUp(1, 3); echo $gen->current(); -
send() methodu ne yapar?
- Generator'a değer gönderir, yield ifadesinin sonucu olur
- Generator'ı baştan başlatır
- Generator'ı kalıcı olarak kapatır
- Yalnızca bir sonraki değeri döndürür, değer göndermez
Cevabı göster
Generator'a değer gönderir, yield ifadesinin sonucu olur — Doğru. send($value), $value'i yield ifadesine geçirecek biçimde yürüme duran yield'den ilerletir.
-
Generator methodlarını eşleştir
- current()
- Şu anki yield değerini döndürür
- next()
- Sonraki yield değerine ilerler
- valid()
- Daha fazla değer var mı kontrol eder
- send()
- yield ifadesine değer geri gönderir