Elixir - Flux

De nombreuses fonctions attendent un énumérable et renvoient un listretour. Cela signifie que, tout en effectuant plusieurs opérations avec Enum, chaque opération va générer une liste intermédiaire jusqu'à ce que nous atteignions le résultat.

Les flux prennent en charge les opérations paresseuses par opposition aux opérations désirées par les énumérations. En bref,streams are lazy, composable enumerables. Cela signifie que Streams n'effectue aucune opération à moins que cela ne soit absolument nécessaire. Prenons un exemple pour comprendre cela -

odd? = &(rem(&1, 2) != 0)
res = 1..100_000 |> Stream.map(&(&1 * 3)) |> Stream.filter(odd?) |> Enum.sum
IO.puts(res)

Lorsque le programme ci-dessus est exécuté, il produit le résultat suivant -

7500000000

Dans l'exemple donné ci-dessus, 1..100_000 |> Stream.map(&(&1 * 3))renvoie un type de données, un flux réel, qui représente le calcul de la carte sur la plage 1..100_000. Il n'a pas encore évalué cette représentation. Au lieu de générer des listes intermédiaires, les flux créent une série de calculs qui ne sont appelés que lorsque nous transmettons le flux sous-jacent au module Enum. Les flux sont utiles lorsque vous travaillez avec des collections volumineuses, voire infinies.

Les flux et les énumérations ont de nombreuses fonctions en commun. Les flux fournissent principalement les mêmes fonctions fournies par le module Enum qui a généré des listes que leurs valeurs de retour après avoir effectué des calculs sur les énumérables d'entrée. Certains d'entre eux sont répertoriés dans le tableau suivant -

N ° Sr. Fonction et sa description
1

chunk(enum, n, step, leftover \\ nil)

Diffuse l'énumérable en blocs, contenant chacun n éléments, où chaque nouveau bloc commence les éléments d'étape dans l'énumérable.

2

concat(enumerables)

Crée un flux qui énumère chaque énumérable dans un énumérable.

3

each(enum, fun)

Exécute la fonction donnée pour chaque élément.

4

filter(enum, fun)

Crée un flux qui filtre les éléments en fonction de la fonction donnée lors de l'énumération.

5

map(enum, fun)

Crée un flux qui appliquera la fonction donnée lors de l'énumération.

6

drop(enum, n)

Supprime paresseusement les n éléments suivants de la liste.