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 — 병렬 평가