take

소스에서 앞의 length개 값을 담은 지연 이터러블을 반환합니다.

Iterable<A> take<A>(int length, Iterable<A> iterable) FxAsyncIterable<A> takeAsync<A>(int length, FxAsyncIterable<A> iterable) Fx<T> Fx.take(int count) // chain FxAsync<T> FxAsync.take(int count) FxEvents<T> FxEvents<T>.take(int count) // chain (events)

강의

take는 지연 파이프라인을 유한하게 유지하는 장치입니다. length개를 내보낸 순간 소스에서 값을 끌어오는 것을 멈추므로, 상류는 그 이상의 요청을 받지 않습니다. range, repeat, cycle 같은 FxDart 소스는 무한할 수 있기 때문에, 파이프라인을 애초에 안전하게 실행할 수 있게 해 주는 것이 take뿐인 경우도 많습니다.

data-first 함수(take(n, iterable))와 체인 메서드(fx(iterable).take(n)) 두 가지로 제공됩니다. 비동기 쪽에서 takeAsync/.take()는 그대로 통과시키는 역할만 합니다. 상류를 직렬화하지 않으므로, 체인 위쪽의 concurrent(n)take가 필요한 만큼을 채울 때까지 계속 겹쳐서 값을 끌어옵니다.

데모 1 · 기본 사용법, 그리고 무한 소스에서 가져오기

cycle은 입력을 영원히 반복합니다 — take가 없으면 순회가 끝나지 않습니다.

데모 2 · 비동기, concurrent 아래에서도 여전히 겹쳐서 실행

여기서는 값을 4개만 끌어오지만, 상류의 concurrent(3)은 여전히 3개씩 동시에 평가합니다 — take가 전체를 순차 실행으로 만들지는 않습니다.

직접 해 보기

연습: 대기열에서 앞의 이름 3개만 가져와 보세요.

관련 항목: takeRight — 앞의 n개 대신 뒤의 n개 · takeWhile — 술어로 가져오기 · range · cycle — 무한 소스 · concurrent — 병렬 평가