Curso de Raku / Programación funcional, concurrente, reactiva y web / Programación funcional / Flujos de datos
Encadenar flujos
El verdadero valor de los flujos aparece cuando tienes varias etapas.
Cada ==> pasa su resultado a la operación siguiente, así
que la tubería entera se lee de arriba abajo en el orden en que ocurre
el trabajo:
(1..10)
==> grep(* %% 2)
==> map(* ** 2)
==> my @result;
say @result; # [4 16 36 64 100]Sigue los datos página abajo: empieza con 1..10,
conserva los números pares, eleva cada uno al cuadrado y recoge el
resultado. Los números pares son 2, 4, 6, 8, 10, y sus
cuadrados son 4, 16, 36, 64, 100.
Escrita como cadena de métodos, la misma tubería es
(1..10).grep(* %% 2).map(* ** 2), y eso se lee de izquierda
a derecha igual que el flujo. Una cadena de métodos no va de dentro
afuera; ejecuta sus etapas exactamente en el mismo orden. La forma que
sí se lee de dentro afuera es anidar las operaciones como funciones
normales, map(* ** 2, grep(* %% 2, 1..10)), donde tienes
que empezar por la llamada más interna e ir saliendo.
Un flujo, por tanto, no es una manera de escapar del código de dentro
afuera: es otra grafía de una tubería de izquierda a derecha. Lo que
aporta es disposición: cada etapa ==> puede ocupar su
propia línea, y un mismo operador funciona igual tanto para pasos con
forma de método como con forma de función, lo que mantiene fácil de
recorrer una tubería larga. Los flujos y las cadenas de métodos hacen en
el fondo el mismo trabajo; elige el que deje más clara cada
transformación concreta.
Práctica
Resuelve 1 cuestionario sobre el contenido de este tema.
Navegación del curso
← Quiz — El operador de flujo | Quiz — Flujos →
💪 O ve directamente a
los ejercicios de esta sección.