take
Devuelve un iterable perezoso con los primeros length valores de una fuente.
Lección
take es lo que mantiene finito a un pipeline perezoso. Deja de
pedir valores a su fuente en cuanto ha emitido length valores:
aguas arriba nunca recibe más peticiones que esas. Dado que fuentes de
FxDart como range, repeat y cycle
pueden ser infinitas, muchas veces take es lo único que hace
que un pipeline sea seguro de ejecutar.
Viene como función data-first (take(n, iterable)) y como método
de cadena (fx(iterable).take(n)). En el lado asíncrono,
takeAsync/.take() es transparente: no serializa lo
que hay aguas arriba, así que un concurrent(n) más arriba en la
cadena sigue solapando sus peticiones hasta que take tiene lo
que necesita.
Demo 1 · Fundamentos, y tomar de una fuente infinita
cycle repite su entrada para siempre; sin
take, iterarlo no terminaría nunca:
Demo 2 · Asíncrono, y sigue solapando bajo concurrent
Aquí solo se piden 4 valores, pero el concurrent(3) de aguas
arriba los sigue evaluando de 3 en 3 — take no obliga a que
todo sea secuencial:
Pruébalo tú
Ejercicio: toma solo los 3 primeros nombres de la cola.
takeRight — los últimos n en vez de los primeros n ·
takeWhile — tomar según un predicado ·
range · cycle — fuentes infinitas ·
concurrent — evaluación en paralelo