forEach

원소마다 함수를 한 번씩 실행합니다. 오로지 부수 효과를 위한 연산자입니다.

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

강의

forEach는 Dart다운 이름이고, fxdart는 FxTS식 표기인 each도 함께 받습니다 — 같은 연산자입니다. toList와 마찬가지로 종결 연산자여서, 호출하는 순간 체인 전체를 통해 모든 값을 끌어당깁니다. 차이는 그 값들을 가지고 무엇을 하느냐입니다. List로 모으는 대신 값마다 f를 실행하고 void를 반환합니다. 출력이나 로깅, 데이터베이스 쓰기처럼 효과를 일으키는 것이 목적이고 값 자체는 다시 받을 필요가 없을 때 쓰면 됩니다.

동기 체인의 .forEach(f)Fx가 물려받은 Dart 자체의 Iterable.forEach입니다. 비동기 체인과 data-first forEach(f, iterable) 형태는 fxdart가 제공하므로, 어디서든 같은 이름으로 읽힙니다.

forEachAsync(또는 FxAsync 체인의 .forEach())는 모든 원소에 대해 f를 await하되, 원소가 도착한 순서를 엄격히 지킵니다 — 개별 호출 중 일부가 더 빨리 끝날 수 있더라도 forEach는 언제나 한 번에 하나씩 순차로 처리합니다. 겹쳐서 실행하고 싶다면 .forEach() 앞의 상류에 .concurrent(n)을 추가하세요.

데모 1 · 기본

데모 2 · 비동기, 엄격한 순서 보장

각 원소가 서로 다른 시간만큼 잠들더라도 forEachAsync는 여전히 1, 2, 3 순서로 처리합니다 — 순서가 뒤바뀌는 일은 없습니다:

직접 해 보기

연습: forEach로 주문마다 영수증 한 줄을 출력하면서 누적 합계를 계산해 보세요.

관련 항목: toList — 대신 List로 모으는 종결 연산자 · consume — 결과를 버리고 중간에 멈출 수도 있는 종결 연산자 · peek — 발상은 같지만 지연 평가(종결 연산자가 아님) · fx — forEach가 마무리하는 그 체인