pipe

Hace pasar un valor por una lista de funciones, de izquierda a derecha — con tipado dinámico.

dynamic pipe(dynamic a, List<Function> fns) dynamic Function(dynamic a) pipeLazy(List<Function> fns)

Lección

En FxTS, pipe(x, f, g, h) es un pipeline currificado y totalmente tipado: TypeScript tiene suficientes sobrecargas y trucos de genéricos para inferir el tipo que sale de cada paso. Dart no puede hacer esto. No existe un truco de sobrecarga con genéricos variádicos, así que el pipe de FxDart es honesto sobre el compromiso: recibe una List<Function> normal y hace pasar un valor dynamic por cada una en orden. Cada función recibe lo que devolvió la anterior, sin ninguna comprobación estática de tipos entre medias.

Es decir, pipe sigue funcionando y sigue leyéndose bien para una transformación corta y desechable — pero un paso que espere el tipo equivocado solo fallará en tiempo de ejecución, y el tipo del resultado del pipeline entero es simplemente dynamic. Si un paso de la lista devuelve un Future, pipe lo espera automáticamente antes de pasar el valor al siguiente paso, así que las funciones síncronas y asíncronas pueden convivir en la misma lista.

Para cualquier cosa que vayas a conservar y mantener, prefiere la cadena fx(): fx(x).map(f).filter(g) está totalmente tipada, tiene autocompletado y detecta los tipos incompatibles en tiempo de compilación — es precisamente la alternativa tipada a este tipo de pipeline. Recurre a pipe cuando los pasos sean dinámicos por naturaleza (por ejemplo, construidos a partir de una lista de funciones en tiempo de ejecución) o cuando estés prototipando rápido. pipeLazy es la misma idea, pero diferida: devuelve una función que puedes llamar más tarde en lugar de ejecutarse al momento.

Demo 1 · Fundamentos

Un pipeline corto construido con las funciones data-first de FxDart:

Demo 2 · La pega, sin adornos

Un paso que espera el tipo equivocado compila sin problemas y solo revienta cuando llega a ejecutarse — esto es justo lo que las cadenas fx() están diseñadas para evitar:

Pruébalo tú

Ejercicio: haz pasar una lista de números por un paso de filtrado y un paso de suma.

Relacionado: fx — la alternativa tipada en forma de cadena · pipe1 — un único paso de pipe, consciente de sync/async · toList — el paso final habitual de un pipe