reduceLazy
Currifica el valor inicial y el combinador de fold en una función reductora reutilizable.
Lección
reduceLazy no reduce nada por sí mismo: lo que hace es
construir un reductor. Le das una función de combinación y
un valor inicial, y recibes de vuelta una función corriente de tipo
Iterable<A> Function que puedes llamar tantas veces como
quieras, sobre tantos iterables distintos como quieras, sin repetir cada
vez el valor inicial y el combinador.
Por dentro es solo una envoltura fina sobre
fold:
reduceLazy(f, seed) devuelve
(iterable) => fold(seed, f, iterable). Fíjate en que el
orden de los argumentos se invierte respecto a fold: aquí es
(f, seed), siguiendo el estilo currificado de FxTS, donde el
iterable se deja deliberadamente para más tarde.
Esta es una función Dart corriente (sin currificación más allá de esto),
así que no tiene método de cadena Fx ni contraparte
*Async. Pero la función que devuelve acepta cualquier cosa que
implemente Iterable<A>, lo que incluye a
Fx<A>. Es decir, puedes pasarla directamente a
.to(...) sobre una cadena.
Demo 1 · Un sumador reutilizable
Demo 2 · Reutilizado sobre listas distintas
La gracia está en definir el «cómo combinar» una sola vez y reutilizarlo en todas partes:
Pruébalo tú
Ejercicio: construye con reduceLazy un reductor reutilizable que encuentre el valor máximo.