Generadores sync* en Dart
Iterables perezosos: nada corre hasta que algo tira.
// sync* builds a lazy Iterable; nothing runs until something pulls.
Iterable<int> fibonacci() sync* {
var a = 0, b = 1;
while (true) {
yield a;
(a, b) = (b, a + b);
}
}
Iterable<String> numbered(Iterable<String> items) sync* {
var n = 1;
for (final item in items) {
yield '$n. $item';
n++;
}
}
void main() {
print(fibonacci().take(8).toList());
print(numbered(['scan', 'count', 'log']).join(' '));
}
Cómo funciona
sync*másyieldarma unIterablebajo demanda.- Un
while (true)infinito es seguro —take(8)tira solo ocho. (a, b) = (b, a + b)intercambia por un record, sin variable temporal.
Palabras clave y builtins usados aquí
Stringfinalforinintsyncvarvoidwhileyield
El intento, en números
- Líneas
- 20
- Caracteres a escribir
- 402
- Tokens
- 135
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 125 segundos.
Paso 3 de 3 en Async; paso 24 de 27 en Fundamentos del lenguaje.