Elixir - Bibliothèques

Elixir offre une excellente interopérabilité avec les bibliothèques Erlang. Parlons brièvement de quelques bibliothèques.

Le module binaire

Le module Elixir String intégré gère les binaires encodés en UTF-8. Le module binaire est utile lorsque vous traitez des données binaires qui ne sont pas nécessairement encodées en UTF-8. Prenons un exemple pour mieux comprendre le module binaire -

# UTF-8
IO.puts(String.to_char_list("Ø"))

# binary
IO.puts(:binary.bin_to_list "Ø")

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

[216]
[195, 152]

L'exemple ci-dessus montre la différence; le module String renvoie des points de code UTF-8, tandis que: binary traite les octets de données brutes.

Le module crypto

Le module crypto contient des fonctions de hachage, des signatures numériques, du cryptage et plus encore. Ce module ne fait pas partie de la bibliothèque standard Erlang, mais est inclus avec la distribution Erlang. Cela signifie que vous devez lister: crypto dans la liste des applications de votre projet chaque fois que vous l'utilisez. Voyons un exemple utilisant le module crypto -

IO.puts(Base.encode16(:crypto.hash(:sha256, "Elixir")))

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

3315715A7A3AD57428298676C5AE465DADA38D951BDFAC9348A8A31E9C7401CB

Le module Digraph

Le module digraph contient des fonctions permettant de traiter les graphes dirigés constitués de sommets et d'arêtes. Après avoir construit le graphe, les algorithmes qui s'y trouvent aideront à trouver, par exemple, le chemin le plus court entre deux sommets ou des boucles dans le graphe. Notez que les fonctionsin :digraph modifier indirectement la structure du graphe comme effet secondaire, tout en renvoyant les sommets ou arêtes ajoutés.

digraph = :digraph.new()
coords = [{0.0, 0.0}, {1.0, 0.0}, {1.0, 1.0}]
[v0, v1, v2] = (for c <- coords, do: :digraph.add_vertex(digraph, c))
:digraph.add_edge(digraph, v0, v1)
:digraph.add_edge(digraph, v1, v2)
for point <- :digraph.get_short_path(digraph, v0, v2) do 
   {x, y} = point
   IO.puts("#{x}, #{y}")
end

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

0.0, 0.0
1.0, 0.0
1.0, 1.0

Le module mathématique

Le module mathématique contient des opérations mathématiques courantes couvrant les fonctions trigonométriques, exponentielles et logarithmiques. Prenons l'exemple suivant pour comprendre le fonctionnement du module Math -

# Value of pi
IO.puts(:math.pi())

# Logarithm
IO.puts(:math.log(7.694785265142018e23))

# Exponentiation
IO.puts(:math.exp(55.0))

#...

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

3.141592653589793
55.0
7.694785265142018e23

Le module de file d'attente

La file d'attente est une structure de données qui implémente efficacement les files d'attente FIFO (premier entré premier sorti). L'exemple suivant montre comment fonctionne un module de file d'attente -

q = :queue.new
q = :queue.in("A", q)
q = :queue.in("B", q)
{{:value, val}, q} = :queue.out(q)
IO.puts(val)
{{:value, val}, q} = :queue.out(q)
IO.puts(val)

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

A
B