Generadores en PHP
Funciones que producen valores de forma perezosa, un yield a la vez.
<?php
// generators produce values lazily, one yield at a time
function naturals(): Generator {
for ($n = 1; ; $n++) {
yield $n;
}
}
foreach (naturals() as $n) {
if ($n > 5) break;
echo $n * $n, "\n";
}
// yield from delegates to another iterable
function letters(): Generator {
yield from ['a', 'b'];
yield 'c';
}
echo implode('-', iterator_to_array(letters(), false)), "\n";
Cómo funciona
yielddentro de una función hace que devuelva unGenerator.naturalses infinito;foreachextrae valores hasta elbreak.yield fromdelega en otro iterable a mitad de camino.iterator_to_arrayvacía un generador;falsedescarta las claves repetidas.
Palabras clave y builtins usados aquí
asbreakechofalseforforeachfunctionifimplodeiterator_to_arrayyield
El intento, en números
- Líneas
- 19
- Caracteres a escribir
- 378
- Tokens
- 82
- Ritmo de tres estrellas
- 80 tpm
Al ritmo de tres estrellas de 80 tokens por minuto, este intento toma unos 61 segundos.
Paso 1 de 3 en Toques modernos; paso 22 de 27 en Fundamentos del lenguaje.