Dart Academy · Lección

Iterables perezosos y generadores con sync*

Produzca valores bajo demanda

Lección 3 de 413 pasos

Iterables perezosos y generadores con sync* es una lección gratuita de Dart Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Dart Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Dart Academy incluye 4 lecciones en total.

Qué significa lazy

Un iterable lazy no calcula sus valores hasta que usted los solicita. El trabajo se realiza bajo demanda, no todo de una vez. 🦥

Los iterables son lazy

Métodos como map y where devuelven un Iterable lazy. No se ejecuta nada hasta que itera o llama a toList.

var it = [1, 2, 3].map((n) {
  print('seen $n');
  return n * 2;
});

Todavía no se ejecuta nada

Hasta que consuma ese iterable, el cuerpo de map nunca se ejecuta. La evaluación diferida permite describir el trabajo y posponer el coste.

for (var x in it) print(x); // now it runs

Por qué ayuda la evaluación diferida

La evaluación diferida evita trabajo cuando solo necesita unos pocos resultados. Combinada con take, permite detenerse antes y omitir el resto.

var first2 = it.take(2).toList();

Conozca los generadores sync*

Una función sync* es un generador que construye un Iterable lazy. Produce los valores uno a uno a medida que se solicitan.

Iterable<int> count(int n) sync* {
  for (var i = 1; i <= n; i++) yield i;
}

La palabra clave yield

Dentro de un generador, yield devuelve un valor a quien llama y pausa la ejecución hasta que se necesita el siguiente valor.

print(count(3).toList()); // [1, 2, 3]

Secuencias infinitas

Como los valores se generan de forma diferida, un generador puede describir de forma segura una secuencia infinita, siempre que tome solo una parte finita.

Iterable<int> naturals() sync* {
  var i = 0;
  while (true) yield ++i;
}

Tomar una parte finita

Combine un generador infinito con take para obtener solo lo que necesita. El bucle se detiene en cuanto se completa la parte seleccionada.

print(naturals().take(5).toList()); // [1, 2, 3, 4, 5]

yield* delega

Use yield* para emitir cada valor de otro iterable o generador. Aplana una secuencia dentro de la secuencia actual.

Iterable<int> both() sync* {
  yield* count(2);
  yield* count(2);
}

Generadores frente a construir listas

Un generador evita crear una lista completa en memoria. Transmite los valores, lo que mantiene las secuencias grandes o interminables con un consumo de memoria reducido.

sync* frente a async*

Use sync* para iterables lazy síncronos. Su equivalente asíncrono, async*, produce un Stream para secuencias de eventos asíncronos.

Comprobación rápida

Compruebe cuánto entiende sobre los generadores.

Resumen

Los iterables son lazy y los generadores sync* producen valores bajo demanda. Esto permite modelar incluso secuencias infinitas con poco coste. 🌟

Gratis para empezar

Aprende Dart con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
30
Lecciones
120

Preguntas frecuentes

¿La lección «Iterables perezosos y generadores con sync*» es gratis?

Sí — el texto completo de «Iterables perezosos y generadores con sync*» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Dart Academy, actualiza a CoddyKit PRO. El curso de Dart Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Iterables perezosos y generadores con sync*»?

Produzca valores bajo demanda Practicas Dart Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Dart Academy?

No se requiere experiencia previa. Dart Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Iterables perezosos y generadores con sync*»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Dart Academy?

Sí. Cada lección de Dart Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Funciones de orden superior y currificación
  2. fold, reduce y expand
  3. Iterables perezosos y generadores con sync*
  4. Composición de tuberías de funciones puras
← Volver a Dart Academy