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

Основы

Базовая настройка, типы и операторы.

Настройка

Установка Elixir

Инструкции по установке для всех ОС есть на официальном сайте.

После того, как Elixir установлен, вы с лёгкостью можете проверить, какая именно версия была установлена.

% 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 }}

Интерактивный режим

Вместе с языком в комплекте идет приложение интерактивной командной строки IEx, которое позволяет выполнять выражения языка на лету.

Для того чтобы начать, запустите 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>

Примечание: В Windows PowerShell вам нужно написать iex.bat.

Попробуем написать несколько простых выражений:

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

Не стоит волноваться, если пока вы поняли не все выражения.

Базовые типы

Целые числа

iex> 255
255

Поддерживаются также бинарные, восьмеричные и шестнадцатеричные числа:

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

Числа с плавающей запятой

В Elixir числа с плавающей запятой требуют наличия хотя бы одной цифры перед точкой. Также они поддерживают e для описания экспонентной части:

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

Логический тип

Elixir поддерживает два значения логического типа: true и false. Абсолютно все значения в языке считаются истинными кроме false и nil:

iex> true
true
iex> false
false

Атомы

Атом — константа, название которой является и значением. В других языках (например, в Ruby) они называются символами:

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

Стоит отметить, что булевы значения true, false являются атомами :true и :false.

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

Названия модулей в Elixir — тоже атомы. MyApp.MyModule — валидный атом, даже если такой модуль ещё не был объявлен.

iex> is_atom(MyApp.MyModule)
true

Также атомы используются в качестве ссылок на модули из библиотек Erlang, в том числе и встроенные.

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

Строки

Строки в Elixir всегда представлены в кодировке UTF-8 и заключаются в двойные кавычки:

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

Строки могут включать разрывы и экранированные последовательности:

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

В Elixir есть и более сложные типы данных. Мы узнаем о них больше, когда познакомимся с коллекциями и функциями.

Базовые операторы

Арифметика

В Elixir, ожидаемо, есть базовые операторы +, -, *, /. Стоит отметить что результатом вызова / всегда будет число с плавающей запятой:

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

Если нужно целочисленное деление или получение остатка — в языке есть две удобные функции специально для этого:

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

Логические операторы

Elixir предоставляет логические операторы ||, &&, !. Они поддерживают работу с любыми типами:

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

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

iex> !42
false
iex> !false
true

Также есть три дополнительных оператора, у которых первый аргумент обязан быть логического типа (true или false):

iex> true and 42
42
iex> false or true
true
iex> not false
true
iex> 42 and true
** (BadBooleanError) expected a boolean on left-side of "and", got: 42
iex> not 42
** (ArgumentError) argument error

Примечание: операторы and и or в Elixir на самом деле соответствуют andalso и orelse в Erlang.

Сравнения

В Elixir поддерживаются все стандартные операторы сравнения: ==, !=, ===, !==, <=, >=, <, >.

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

Для строгого сравнения целых чисел и чисел с плавающей запятой используется ===:

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

Удобной возможностью языка является то, что любые типы сравнимы друг с другом. Это удобно при сортировках. Порядок не стоит запоминать, но о его существовании стоит знать:

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

Это приводит к некоторым интересным правильным сравнениям, которых обычно нет в других языках программирования:

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

Интерполяция строк

Если вы использовали язык Ruby, то интерполяция в Elixir покажется вам знакомой:

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

Объединение строк

Для объединения двух строк используется оператор <>:

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