Elisir - Biblioteche

Elixir fornisce un'eccellente interoperabilità con le librerie Erlang. Parliamo brevemente di alcune biblioteche.

Il modulo binario

Il modulo Elixir String integrato gestisce i file binari con codifica UTF-8. Il modulo binario è utile quando si ha a che fare con dati binari che non sono necessariamente codificati in UTF-8. Consideriamo un esempio per comprendere ulteriormente il modulo Binario -

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

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

Quando il programma di cui sopra viene eseguito, produce il seguente risultato:

[216]
[195, 152]

L'esempio sopra mostra la differenza; il modulo String restituisce codepoint UTF-8, mentre: binary si occupa di byte di dati grezzi.

Il modulo Crypto

Il modulo crittografico contiene funzioni di hashing, firme digitali, crittografia e altro ancora. Questo modulo non fa parte della libreria standard Erlang, ma è incluso nella distribuzione Erlang. Ciò significa che devi elencare: crypto nell'elenco delle applicazioni del tuo progetto ogni volta che lo usi. Vediamo un esempio usando il modulo crypto -

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

Quando il programma di cui sopra viene eseguito, produce il seguente risultato:

3315715A7A3AD57428298676C5AE465DADA38D951BDFAC9348A8A31E9C7401CB

Il modulo Digraph

Il modulo digraph contiene funzioni per gestire grafi diretti costruiti con vertici e archi. Dopo aver costruito il grafo, gli algoritmi presenti aiuteranno a trovare, ad esempio, il percorso più breve tra due vertici o loop nel grafo. Nota che il file functionsin :digraph alterare la struttura del grafico indirettamente come effetto collaterale, restituendo i vertici o gli spigoli aggiunti.

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

Quando il programma di cui sopra viene eseguito, produce il seguente risultato:

0.0, 0.0
1.0, 0.0
1.0, 1.0

Il modulo matematico

Il modulo di matematica contiene operazioni matematiche comuni che coprono funzioni trigonometriche, esponenziali e logaritmiche. Consideriamo il seguente esempio per capire come funziona il modulo Math:

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

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

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

#...

Quando il programma di cui sopra viene eseguito, produce il seguente risultato:

3.141592653589793
55.0
7.694785265142018e23

Il modulo della coda

La coda è una struttura di dati che implementa le code FIFO (first-in first-out) (a doppia estremità) in modo efficiente. L'esempio seguente mostra come funziona un modulo Queue:

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)

Quando il programma di cui sopra viene eseguito, produce il seguente risultato:

A
B