forEach

Ejecuta una función una vez por elemento, únicamente por sus efectos secundarios.

void forEach<A>(void Function(A a) f, Iterable<A> iterable) Future<void> forEachAsync<A>(FutureOr<void> Function(A a) f, FxAsyncIterable<A> iterable) void Fx.forEach(void Function(T a) f) // chain (inherited from Iterable) Future<void> FxAsync.forEach(FutureOr<void> Function(T a) f) // chain void each<A>(void Function(A a) f, Iterable<A> iterable) // FxTS alias

Lección

forEach es el nombre idiomático en Dart; fxdart también acepta la grafía each de FxTS: son el mismo operador. Es un operador terminal, igual que toList: al llamarlo tira de todos los valores a través de la cadena entera. La diferencia está en qué hace con esos valores: en lugar de recogerlos en una List, se limita a ejecutar f con cada uno y devuelve void. Úsalo cuando estés imprimiendo, registrando logs, escribiendo en una base de datos o produciendo cualquier otro efecto, y no necesites los valores de vuelta.

En una cadena síncrona, .forEach(f) es el propio Iterable.forEach de Dart, heredado por Fx; la cadena asíncrona y la forma data-first forEach(f, iterable) las aporta fxdart, para que el operador se lea igual en todas partes.

forEachAsync (o .forEach() sobre una cadena FxAsync) espera con await a f para cada elemento, estrictamente en el orden en que llegan; aunque algunas llamadas individuales pudieran terminar antes que otras, forEach siempre procesa una a una y en secuencia. Si quieres solapamiento, añade .concurrent(n) antes de .forEach() en la cadena.

Demo 1 · Fundamentos

Demo 2 · Asíncrono, estrictamente en orden

Aunque cada elemento duerme durante un tiempo distinto, forEachAsync los sigue procesando 1, 2, 3 — nunca fuera de orden:

Pruébalo tú

Ejercicio: usa forEach para imprimir una línea de recibo por cada pedido y llevar un total acumulado.

Relacionado: toList — operador terminal que en su lugar recoge una List · consume — operador terminal que descarta los resultados y puede parar antes · peek — la misma idea, pero perezoso (no terminal) · fx — la cadena que forEach termina