Base

Configurazione, tipi di base ed operazioni di base.

Configurazione

Installare Elixir

Le istruzioni per l’installazione per ciascun sistema operativo sono disponibili su Elixir-lang.org nella guida Installing Elixir.

Dopo aver installato Elixir, possiamo facilmente controllare la versione installata.

% elixir -v
Erlang/OTP {{ site.erlang.OTP }} [erts-{{ site.erlang.erts }}] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Elixir {{ site.elixir.version }}

Modalità Interattiva

Elixir viene fornito con IEx, una shell interattiva che permette di eseguire istruzioni di Elixir in tempo reale.

Per cominciare, lanciamo il comando iex:

Erlang/OTP {{ site.erlang.OTP }} [erts-{{ site.erlang.erts }}] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Interactive Elixir ({{ site.elixir.version }}) - press Ctrl+C to exit (type h() ENTER for help)
iex>

Ora proviamola con alcuni semplici comandi:

iex> 2+3
5
iex> 2+3 == 5
true
iex> String.length("The quick brown fox jumps over the lazy dog")
43

Non preoccuparti se non capisci ogni singola espressione, ma speriamo che tu abbia un’idea generale.

Tipi di Base

Interi

iex> 255
255

Il supporto per numeri in notazione binaria, ottale ed esadecimale è già incluso:

iex> 0b0110
6
iex> 0o644
420
iex> 0x1F
31

Numeri in Virgola Mobile (Float)

In Elixir, i numeri in virgola mobile richiedono un decimale dopo almeno una cifra; hanno una doppia precisione a 64 bit e supportano la e per i numeri con notazione esponenziale:

iex> 3.14 
 3.14
iex> .14 
** (SyntaxError) iex:2: syntax error before: '.'
iex> 1.0e-10
1.0e-10

Booleani

Elixir supporta true e false come booleani; ogni valore è considerato vero ad eccezione di false e nil:

iex> true
true
iex> false
false

Atoms

Un atom è una costante la quale nome è anche il suo valore. Se hai familiarità con Ruby, puoi considerare gli atoms come i Symbols:

iex> :foo
:foo
iex> :foo == :bar
false

NOTA: I booleani true e false sono, rispettivamente, anche :true e :false.

iex> is_atom(true)
true
iex> is_boolean(:true)
true
iex> :true === true
true

I Nomi dei moduli in Elixir sono anch’essi atomi. MyApp.MyModule è un atom valido, anche se nessun modulo con questo nome è stato dichiarato.

iex> is_atom(MyApp.MyModule)
true

Inoltre, gli Atomi sono usati per fare riferimento ai moduli delle librerie Erlang, incluse quelle già integrate.

iex> :crypto.strong_rand_bytes 3
<<23, 104, 108>>

Stringhe

Le stringhe in Elixir sono codificate in UTF-8 e vengono racchiuse tra apici doppi:

iex> "Hello"
"Hello"
iex> "dziękuję"
"dziękuję"

Le stringhe supportano le interruzioni di linea e le sequenze di escape:

iex> "foo
...> bar"
"foo\nbar"
iex> "foo\nbar"
"foo\nbar"

Oltre a questi tipi di base, Elixir supporta tipi di dati piú compliessi. Impareremo di piú su questi durante le lezioni sulle collezioni e funzioni.

Operazioni di Base

Aritmetica

Elixir supporta gli operatori di base +, -, *, e / esattamente come ti aspetteresti. È importante notare che l’operatore / restituirà sempre un numero in virgola mobile:

iex> 2 + 2
4
iex> 2 - 1
1
iex> 2 * 5
10
iex> 10 / 5
2.0

Se hai bisogno di fare una divisione tra interi o ottenere il resto di una divisione, Elixir offre due funzioni utili per questo scopo:

iex> div(10, 5)
2
iex> rem(10, 3)
1

Logica Booleana

Elixir mette a disposizione gli operatori booleani ||, &&, e !. Questi supportano qualsiasi tipo di dato:

iex> -20 || true
-20
iex> false || 42
42

iex> 42 && true
true
iex> 42 && nil
nil

iex> !42
false
iex> !false
true

Esistono altri tre operatori che devono ricevere un booleano (true e false) come primo argomento:

iex> true and 42
42
iex> false or true
true
iex> not false
true
iex> 42 and true
** (ArgumentError) argument error: 42
iex> not 42
** (ArgumentError) argument error

Nota: Le operazioni booleane and e or in Elixir derivano a andalso e orelse in Erlang.

Confronto

Elixir è provvisto di tutti gli operatori di comparazione ai quali siamo abituati: ==, !=, ===, !==, <=, >=, < e >.

iex> 1 > 2
false
iex> 1 != 2
true
iex> 2 == 2
true
iex> 2 <= 3
true

Per una comparazione rigorosa (strict) tra interi e numeri in virgola mobile, usa ===:

iex> 2 == 2.0
true
iex> 2 === 2.0
false

Una funzionalità importante di Elixir è che due valori di qualsiasi tipo possono essere confrontati, questo è particolarmente utile per l’ordinamento. Non abbiamo bisogno di memorizzare la sequenza di ordinamento, ma è importante esserne al corrente:

number < atom < reference < function < port < pid < tuple < map < list < bitstring

Questo può portare ad alcuni interessanti, e validi, confronti che potresti non trovare in altri linguaggi:

iex> :hello > 999
true
iex> {:hello, :world} > [1, 2, 3]
false

Interpolazione in una Stringa

Se hai usato Ruby, l’interpolazione di una stringa in Elixir ti sembrerà familiare:

iex> name = "Sean"
iex> "Hello #{name}"
"Hello Sean"

Concatenazione di Stringhe

Per concatenare le stringhe si usa l’operatore <>:

iex> name = "Sean"
iex> "Hello " <> name
"Hello Sean"
Caught a mistake or want to contribute to the lesson? Edit this lesson on GitHub!