typestar

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

  1. sync* más yield arma un Iterable bajo demanda.
  2. Un while (true) infinito es seguro — take(8) tira solo ocho.
  3. (a, b) = (b, a + b) intercambia por un record, sin variable temporal.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 3 de 3 en Async; paso 24 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →