reduceLazy

Currifica el valor inicial y el combinador de fold en una función reductora reutilizable.

Acc Function(Iterable<A>) reduceLazy<A, Acc>(Acc Function(Acc acc, A a) f, Acc seed)

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.

Relacionado: fold — el reductor con valor inicial al que envuelve · reduce — el terminal sin valor inicial · pipe — compón funciones como esta en un pipeline · memoize — otra forma de construir una función reutilizable