Curso de Raku / Programación funcional, concurrente, reactiva y web / Programación funcional / Flujos de datos
El flujo hacia atrás
Todos los flujos vistos hasta ahora fluían hacia delante con
==>, desde una fuente a la izquierda hacia un destino a
la derecha. Raku tiene también el operador espejo, <==,
el flujo hacia atrás. Va al revés: el destino está a la
izquierda y los datos se traen desde la fuente de la
derecha.
Aquí tienes la tubería de números pares de antes, escrita hacia atrás:
my @evens <== grep(* %% 2) <== (1..10);
say @evens; # [2 4 6 8 10]Léela de derecha a izquierda: toma 1..10, conserva los
números pares y recógelos en @evens. El resultado es
exactamente el mismo que el de
(1..10) ==> grep(* %% 2) ==> my @evens: solo ha
cambiado la dirección en la que escribes las etapas.
Los flujos hacia atrás se encadenan igual, y de nuevo el destino va primero:
my @result <== map(* ** 2) <== grep(* %% 2) <== (1..10);
say @result; # [4 16 36 64 100]El trabajo sigue ocurriendo desde la fuente — empieza con
1..10, conserva los pares, elévalos al cuadrado —, pero en
la página las etapas se enumeran desde el destino hacia el origen. El
orden de los elementos queda intacto; <== cambia solo la
dirección de lectura, nunca los datos.
Como el código suele leerse de izquierda a derecha, el
==> hacia delante tiende a leerse con más naturalidad:
primero te encuentras los datos y los sigues hasta donde aterrizan. El
<== hacia atrás está ahí para las ocasiones en que
empezar por el destino cuenta mejor la historia, nombrando lo que
estás construyendo antes que aquello con lo que se
construye. Son espejos exactos, así que elige la dirección que
mejor se lea.
Práctica
Resuelve 1 cuestionario sobre el contenido de este tema.
Navegación del curso
← Quiz — Flujos | Quiz — El flujo hacia atrás →
💪 O ve directamente a
los ejercicios de esta sección.