zip3
Tres iterables recorridos en paralelo: zip con una entrada más.
Lección
zip3 es zip con un tercer
iterable. Todo lo que explica la página de
zip sigue valiendo igual: un record
por paso, pereza y parada en el momento en que cualquiera de las
entradas se agota, así que el resultado es tan largo como la más corta de
las tres. El tipo de elemento es un record de Dart
(A, B, C), así que desestructúralo con patrones en vez de por
índice.
Existe como función propia porque Dart no tiene genéricos variádicos: un
único zip que tomara una lista de iterables tendría que
borrar los tipos de cada entrada, y (A, B, C) es justo lo que
hace que el resultado merezca la pena. La misma razón por la que a
tee le acompaña tee3.
Una asimetría que conviene conocer: zip tiene método de
cadena (fx(a).zip(b)) y zip3 no — una cadena
tiene un solo receptor y zip3 necesita tres iguales. Llámalo
como función de nivel superior y envuelve el resultado en
fx() para seguir, como hace la última línea de la demo.
zip3Async es la forma asíncrona y, igual que
zipAsync, lanza las tres llamadas a next() antes
de esperar ninguna, así que las fuentes se tiran en paralelo por cada
record en lugar de una detrás de otra.