Elisir - Stream
Molte funzioni si aspettano un enumerabile e restituiscono un file listindietro. Significa che, durante l'esecuzione di più operazioni con Enum, ogni operazione genererà un elenco intermedio fino a quando non raggiungiamo il risultato.
I flussi supportano operazioni pigre rispetto alle operazioni desiderose tramite enumerazioni. In breve,streams are lazy, composable enumerables. Ciò significa che Streams non esegue un'operazione a meno che non sia assolutamente necessario. Consideriamo un esempio per capire questo:
odd? = &(rem(&1, 2) != 0)
res = 1..100_000 |> Stream.map(&(&1 * 3)) |> Stream.filter(odd?) |> Enum.sum
IO.puts(res)
Quando il programma di cui sopra viene eseguito, produce il seguente risultato:
7500000000
Nell'esempio sopra riportato, 1..100_000 |> Stream.map(&(&1 * 3))restituisce un tipo di dati, un flusso effettivo, che rappresenta il calcolo della mappa nell'intervallo 1..100_000. Non ha ancora valutato questa rappresentazione. Invece di generare elenchi intermedi, i flussi creano una serie di calcoli che vengono richiamati solo quando passiamo il flusso sottostante al modulo Enum. I flussi sono utili quando si lavora con raccolte grandi, possibilmente infinite.
I flussi e le enumerazioni hanno molte funzioni in comune. Gli stream forniscono principalmente le stesse funzioni fornite dal modulo Enum che ha generato gli elenchi come valori restituiti dopo aver eseguito calcoli sugli enumerabili di input. Alcuni di loro sono elencati nella tabella seguente:
Sr.No. | Funzione e sua descrizione |
---|---|
1 | chunk(enum, n, step, leftover \\ nil) Trasmette l'enumerabile in blocchi, contenenti n elementi ciascuno, in cui ogni nuovo blocco avvia gli elementi del passaggio nell'enumerabile. |
2 | concat(enumerables) Crea un flusso che enumera ogni enumerabile in un enumerabile. |
3 | each(enum, fun) Esegue la funzione data per ogni elemento. |
4 | filter(enum, fun) Crea un flusso che filtra gli elementi in base alla funzione data sull'enumerazione. |
5 | map(enum, fun) Crea un flusso che applicherà la funzione data all'enumerazione. |
6 | drop(enum, n) Elimina pigramente i successivi n elementi dall'enumerabile. |