consume

체인을 통해 값을 끌어당긴 뒤 그대로 버립니다 — 부수 효과만을 위한 연산자이며, 개수를 제한할 수도 있습니다.

void consume<A>(Iterable<A> iterable, [int? n]) Future<void> consumeAsync<A>(FxAsyncIterable<A> iterable, [int? n]) void Fx.consume([int? n]) // chain Future<void> FxAsync.consume([int? n])

강의

consume은 가장 단순한 종결 연산자입니다. 체인을 통해 값을 끌어당기면서 상류에 있는 peek이나 mapEffect 단계의 부수 효과를 실행하지만, 값을 수집하거나 전달하지 않고 전부 버립니다. 파이프라인의 목적 자체가 부수 효과이고 toListList를 만드는 것이 그저 낭비되는 할당일 뿐일 때 쓰면 됩니다.

선택 인자 n 덕분에 무한하거나 아주 큰 소스와도 잘 어울립니다. consume(5)는 정확히 5개의 값만 끌어당기고 멈추므로, 바탕이 되는 이터러블이 (상한 없는 range, cycle, 개수가 엄청난 repeat처럼) 끝없이 이어지더라도 문제가 없습니다. 유한한 이터러블을 끝까지 비우려면 n을 생략하세요.

consumeAsync(또는 FxAsync 체인의 .consume())도 같은 방식으로 동작하며, 끌어당긴 값의 부수 효과를 차례로 await합니다. 어차피 버릴 결과 리스트를 수집하는 비용을 치르지 않고 비동기 peek/로깅 파이프라인을 실제로 실행시키고 싶을 때 유용합니다.

데모 1 · 무한 소스에 상한 두기

range(1000000)은 전부 끌어당기면 사실상 끝나지 않지만, consume(5)는 5개를 처리한 뒤 멈춥니다.

데모 2 · 비동기 부수 효과, 결과 리스트 없이

직접 해 보기

연습: 사실상 무한한 repeat()에서 앞의 3개 값만 consume 하고, 끌어당길 때마다 로그를 남겨 보세요.

관련 항목: each — 마찬가지로 f를 실행하는 종결 연산자, 다만 n 제한은 없음 · toList — 대신 결과를 수집하는 종결 연산자 · cycle — consume과 자주 짝을 이루는 무한 소스 · peek — consume이 주로 강제 실행시키는 지연 부수 효과 단계