fold, reduce y expand
Agregue y aplane iterables
fold, reduce y expand es una lección gratuita de Dart Academy en CoddyKit. Esta es la lección 2 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.
Agrupar una colección
A menudo querrá reducir una lista completa a un solo valor, como una suma o un máximo. Dart ofrece fold y reduce precisamente para eso. 🧮
Conozca reduce
reduce combina los elementos por pares mediante su función. Comienza con el primer elemento, por lo que la lista no puede estar vacía.
var sum = [1, 2, 3, 4].reduce((a, b) => a + b);
print(sum); // 10reduce conserva un resultado
Cada paso recibe el resultado acumulado y el elemento siguiente. Piense en a como el acumulador que crece a medida que avanza.
var max = [3, 9, 2].reduce((a, b) => a > b ? a : b);
print(max); // 9La trampa de la lista vacía
Llamar a reduce sobre una lista vacía produce un StateError. Cuando una lista podría estar vacía, use fold en su lugar.
Conozca fold
fold se parece a reduce, pero recibe un valor inicial. Esa semilla determina el tipo del resultado y gestiona las listas vacías de forma segura.
var total = [1, 2, 3].fold(0, (a, b) => a + b);
print(total); // 6fold puede cambiar el tipo
Como la semilla define el tipo, fold puede convertir una lista de ints en un String, un Map o cualquier otro tipo que necesite.
var joined = [1, 2, 3].fold('', (a, b) => '$a$b');
print(joined); // 123fold es seguro con listas vacías
Con una lista vacía, fold simplemente devuelve la semilla. No hay errores ni casos especiales que recordar.
var s = <int>[].fold(0, (a, b) => a + b);
print(s); // 0reduce frente a fold
Use reduce para combinar rápidamente una lista no vacía manteniendo el mismo tipo. Use fold cuando necesite una semilla o un nuevo tipo de resultado.
Conozca expand
expand transforma cada elemento en un iterable y después los aplana todos en un único flujo de valores. Es map más flatten.
var r = [1, 2].expand((n) => [n, n * 10]);
print(r.toList()); // [1, 10, 2, 20]Aplanar listas anidadas
Un uso habitual de expand es aplanar una lista de listas y convertirla en una sola lista plana con una llamada clara.
var flat = [[1, 2], [3, 4]].expand((x) => x);
print(flat.toList()); // [1, 2, 3, 4]Encadenar los tres métodos
Estos métodos se componen perfectamente. Puede usar expand para aplanar y después fold para agrupar, dentro de un único pipeline legible.
var t = [[1, 2], [3]].expand((x) => x).fold(0, (a, b) => a + b);
print(t); // 6Comprobación rápida
Elija la herramienta adecuada para calcular una suma segura con listas vacías.
Resumen
reduce combina, fold combina usando una semilla y expand aplana. Juntos permiten agrupar cualquier colección fácilmente. 🎉
Preguntas frecuentes
¿La lección «fold, reduce y expand» es gratis?
Sí — el texto completo de «fold, reduce y expand» 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 «fold, reduce y expand»?
Agregue y aplane iterables 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 2 de 4.
¿Cuánto tiempo toma la lección «fold, reduce y expand»?
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
- Funciones de orden superior y currificación
- fold, reduce y expand
- Iterables perezosos y generadores con sync*
- Composición de tuberías de funciones puras