Podstawy
Przygotowanie środowiska, podstawowe typy danych i operacje.
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.
Po zakończeniu procesu instalacji możemy w łatwy sposób sprawdzić, którą wersję zainstalowaliśmy:
% 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 }}
Tryb interaktywny
W Elixirze dostępna jest interaktywna powłoka iex
, która pozwala nam na bieżąco uruchamiać kod w konsoli.
By ją uruchomić, wpisz w wierszu poleceń 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>
Uwaga: W Windows PowerShell musisz wpisać iex.bat
.
Spróbujmy wykonać kilka prostych operacji:
iex> 2+3
5
iex> 2+3 == 5
true
iex> String.length("The quick brown fox jumps over the lazy dog")
43
Nie martw się, jeśli nie rozumiesz jeszcze wszystkich wyrażeń. Mamy nadzieję, że zrozumiesz ideę.
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 (ang. atoms) 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> is_atom(true)
true
iex> is_boolean(:true)
true
iex> :true === true
true
Nazwy modułów w Elixirze również są atomami.
Dla przykładu 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.strong_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"
Elixir zawiera również bardziej złożone typy danych. Więcej na ten temat dowiemy się, kiedy poznamy kolekcje i funkcje.
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 (tj. modulo), 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
lub 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
Uwaga: Operatory and
oraz or
w języku Elixir są odwzorowywane na andalso
i orelse
w Erlangu.
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
Dla ścisłego porównania liczb całkowitych i zmiennoprzecinkowych użyj operatora ===
:
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 mieć to na uwadze:
number < atom < reference < function < port < pid < tuple < map < 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ś Ruby to interpolacja ciągów znaków w Elixirze będzie wyglądać znajomo:
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"
Caught a mistake or want to contribute to the lesson? Edit this lesson on GitHub!