mapEffect

Idéntico a map — una convención de nombres para cuando la función está ahí por su efecto secundario.

Iterable<B> mapEffect<A, B>(B Function(A a) f, Iterable<A> iterable) FxAsyncIterable<B> mapEffectAsync<A, B>(FutureOr<B> Function(A a) f, FxAsyncIterable<A> iterable) Fx<R> Fx.mapEffect<R>(R Function(T a) f) // chain FxAsync<R> FxAsync.mapEffect<R>(FutureOr<R> Function(T a) f)

Lección

Si miras el código fuente verás que mapEffect es literalmente B mapEffect(f, iterable) => map(f, iterable); — la misma función, la misma pereza, la misma firma. Existe únicamente para documentar la intención en el punto de llamada: usa mapEffect cuando el valor de retorno del callback importa menos que lo que hace por el camino (escribir en un log, guardar en una base de datos, incrementar un contador), y usa map cuando el valor de retorno es lo que buscas.

Al ser un simple alias, todo lo que sabes de map se aplica sin cambios: es perezoso, compone con .concurrent(n) en el lado asíncrono y no tiene ningún manejo de errores propio. No hay ninguna razón de comportamiento para elegir uno u otro — es una señal de legibilidad para quien lea el pipeline después (a menudo, tú mismo).

Demo 1 · Fundamentos

El callback registra un efecto secundario y además devuelve un valor transformado — la misma forma que map, distinta intención en el punto de llamada:

Demo 2 · Asíncrono, con concurrencia

mapEffectAsync se ejecuta exactamente sobre el mismo motor que mapAsync, así que .concurrent(n) lo paraleliza igual — muy útil para pipelines de «procesar y persistir»:

Pruébalo tú

Ejercicio: usa mapEffect para hacer print de una línea 'billing $<dollars>' por cada importe mientras conviertes céntimos a dólares.

Relacionado: map — la función en la que delega mapEffect · peek — observar sin cambiar el valor en absoluto · flatMap — map + aplanado · concurrent — evaluación en paralelo