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

В предыдущей главе мы увидели, что Эликсир предоставляет операторы +, -, *, / для арифметических операций, а также функции div/2 и rem/2 для целочисленного деления и получения остатка.

Эликсир также предоставляет операторы ++ и -- для манипуляций со списками:

iex> [1, 2, 3] ++ [4, 5, 6]
[1, 2, 3, 4, 5, 6]

iex> [1, 2, 3] -- [2]
[1, 3]

Конкатенация строк выполняется с помощью оператора <>:

iex> "foo" <> "bar"
"foobar"

Эликсир также предоставляет три логических оператора: or, and и not. Эти операторы строгие в том смысле, что они ожидают логическое значение (true или false) в качестве первого аргумента:

iex> true and true
true

iex> false or is_atom(:example)
true

Передача значения другого типа вызовет исключение:

iex> 1 and true
** (BadBooleanError) expected a boolean on left-side of "and", got: 1

Операторы or и and являются операторами сокращенного вычисления. Они выполняют правую часть, если левой недостаточно, чтобы определить результат:

iex> false and raise("This error will never be raised")
false

iex> true or raise("This error will never be raised")
true

Обратите внимание. Если вы эрлангист, операторы and и or в Эликсире на самом деле соответствуют операторам andalso и orelse из Эрланга.

Кроме этих операторов, Эликсир также предоставляет ||, && и !, которые принимают аргументы любого типа. Для этих операторов все значения, кроме false и nil будут возвращать true:

# или
iex> 1 || true
1

iex> false || 11
11

# и
iex> nil && 13
nil

iex> true && 17
17

# отрицание
iex> !true
false

iex> !1
false

iex> !nil
true

Подытожим: используйте and, or и not, когда вы ожидаете логические значения. Если любой из аргументов не логического типа, используйте &&, || и !.

Эликсир также предоставляет операторы сравнения ==, !=, ===, !==, <=, >=, <, и >:

iex> 1 == 1
true

iex> 1 != 2
true

iex> 1 < 2
true

Разница между операторами == и === состоит в том, что последний более строг при сравнении целых и дробных чисел:

iex> 1 == 1.0
true

iex> 1 === 1.0
false

В Эликсире мы можем сравнивать два разных типа данных:

iex> 1 < :atom
true

Причина, по которой мы можем это сделать – прагматизм. Алгоритмам сортировки не нужно беспокоиться о разнице типов при сортировке. Полный порядок сортировки представлен ниже:

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

Вам не нужно запоминать этот порядок, достаточно знать, что он существует.

Для получения справочной информации по операторам (и порядку сортировки), перейдите на страницу справки по операторам.

В следующей главе, мы обсудим некоторые базовые функции, приведение типов данных и немного затроним тему управления потоком исполнения.

© 2020 / Россия Любые мысли и вопросы пишите на elixir@wunsh.ru.