Do you want to pick up from where you left of?
Take me there

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!