Corso di Raku / Programmazione funzionale, concorrente, reattiva e web / Programmazione funzionale / Feed di dati

Concatenare i feed

Il vero valore dei flussi appare quando gli stadi sono parecchi. Ogni ==> passa il proprio risultato all’operazione successiva, quindi un’intera pipeline si legge dall’alto in basso nell’ordine in cui avviene il lavoro:

(1..10)
    ==> grep(* %% 2)
    ==> map(* ** 2)
    ==> my @result;

say @result; # [4 16 36 64 100]

Segui i dati giù per la pagina: parti da 1..10, conserva i numeri pari, eleva al quadrato ciascuno di essi e raccogli il risultato. I numeri pari sono 2, 4, 6, 8, 10, e i loro quadrati sono 4, 16, 36, 64, 100.

Scritta come catena di metodi, la stessa pipeline è (1..10).grep(* %% 2).map(* ** 2) — e anche quella si legge da sinistra a destra proprio come il flusso. Una catena di metodi non va dall’interno all’esterno; esegue i propri stadi esattamente nello stesso ordine. La forma che si legge davvero dall’interno all’esterno è quella che annida le operazioni come funzioni semplici, map(* ** 2, grep(* %% 2, 1..10)), dove devi partire dalla chiamata più interna e lavorare verso l’esterno.

Un flusso, quindi, non è un modo di sfuggire al codice dall’interno all’esterno: è un’altra grafia di una pipeline da sinistra a destra. Ciò che aggiunge è l’impaginazione: ogni stadio ==> può stare sulla propria riga, e l’unico operatore funziona allo stesso modo sia per i passi in stile metodo sia per quelli in stile funzione, il che tiene facile da scorrere una lunga pipeline. Alla fine i flussi e le catene di metodi fanno lo stesso lavoro; scegli quello che rende più chiara una particolare trasformazione.

Pratica

Risolvi 1 quiz sul contenuto di questo argomento.

Quiz — L’operatore feed   |   Quiz — Feed


💪 Oppure vai direttamente agli esercizi di questa sezione.