Fork me on GitHub

Podstawy

Przygotowanie środowiska, podstawowe typy danych i operacje

Spis treści

Przygotowanie środowiska

Instalacja

Proces instalacji środowiska dla poszczególnych systemów operacyjnych jest opisany, w języku angielskim, na stronie Elixir-lang.org w sekcji Installing Elixir.

Tryb interaktywny

W Elixirze dostępna jest interaktywna powłoka iex, która pozwala nam na uruchamianie kodu w konsoli.

By ją uruchomić wpisz w wierszu poleceń iex:

Erlang/OTP 20 [erts-8.0.1] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Interactive Elixir (1.3.4) - press Ctrl+C to exit (type h() ENTER for help)
iex>

Podstawowe typy danych

Liczby całkowite

ang. Integer

iex> 255
255

Elixir pozwala też na używanie liczb w notacji binarnej, ósemkowej i szesnastkowej:

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

Liczby zmiennoprzecinkowe

W Elixirze liczby zmiennoprzecinkowe (ang. float) oznaczamy pojedynczą kropką; mają one 64 bitową precyzję oraz możemy użyć notacji z e do wyrażenia potęg:

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

Wartości logiczne

Wartości logiczne (ang. Boolean) są reprezentowane przez true dla prawdy i false dla fałszu; każda wartość, innego typu, będzie interpretowana jako prawda poza false i nil:

iex> true
true
iex> false
false

Atomy

Atomy są to stałe, których nazwa jest jednocześnie ich wartością. Jeżeli masz doświadczenie z językiem Ruby to atomy są tym samym co Symbole:

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

Wartości true i false są też atomami odpowiednio:true i :false.

iex> true |> is_atom
true
iex> :true |> is_boolean
true
iex> :true === true
true

Nazwy modułów w Elixirze są atomami. Na przykład MyApp.MyModule jest poprawnym atomem nawet wtedy, gdy moduł o takiej nazwie nie istnieje.

iex> is_atom(MyApp.MyModule)
true

Atomy służą też jako odwołania do bibliotek Erlanga, również tych wbudowanych.

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

Ciągi znaków

Ciągi znaków (ang. String) w Elixirze są reprezentowane w kodowaniu UTF-8 i otoczone znakiem cudzysłowu:

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

W ciągu znaków można używać zarówno znaków ucieczki jak i tworzyć ciągi w wielu liniach:

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

Podstawowe operacje

Arytmetyczne

Elixir oczywiście wspiera podstawowe operatory +, -, * i/. Ważne jest, że operacja / zawsze zwróci liczbę zmiennoprzecinkową:

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

Jeżeli jednak potrzebujesz dzielenia liczb całkowitych, albo reszty z dzielenia, Elixir udostępnia dwie funkcje do obsługi tych działań:

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

Logiczne

Elixir posiada operatory logiczne ||, && i !. Wspierają one wszystkie typy:

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

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

iex> !42
false
iex> !false
true

Istnieją też trzy operatory, których pierwszym argumentem musi być wartość logiczna (true i false):

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

Porównania

Elixir posiada pełen zestaw operatorów porównania: ==, !=, ===, !==, <=, >=, < i >.

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

Operator === porównuje wartość i typ, na przykład:

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

Ważną cechą Elixira jest to, że można porównać zmienne dowolnego typu, co jest szczególnie użyteczne przy sortowaniu. Nie musimy pamiętać kolejności przy sortowaniu, ale warto jest by mieć to na uwadze:

number < atom < reference < functions < port < pid < tuple < maps < list < bitstring

Pozwala to na stworzenie nietypowych, ale poprawnych konstrukcji porównań, które nie są dostępne w innych językach:

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

Interpolacja ciągów znaków

Jeżeli używałeś Rubiego to interpolacja ciągów znaków w Elixirze wygląda tak samo:

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

Łączenie ciągów znaków

By połączyć dwa ciągi znaków wystarczy użyć operatora <>:

iex> name = "Sean"
iex> "Hello " <> name
"Hello Sean"

Podziel się