Spec-Zone.ru › Elixir 1.16

Source Справочник по операторам

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

Порядок приоритета и ассоциативность операторов

Ниже приведен список всех операторов, которые Elixir способен распознавать, упорядоченные по убыванию приоритета и вместе с их ассоциативностью:

Оператор Ассоциативность
@ Унарная
. Слева направо
+ - ! ^ not Унарная
** Слева направо
* / Слева направо
+ - Слева направо
++ -- +++ --- .. <> Справа налево
in not in Слева направо
|> <<< >>> <<~ ~>> <~ ~> <~> Слева направо
< > <= >= Слева направо
== != =~ === !== Слева направо
&& &&& and Слева направо
|| ||| or Слева направо
= Справа налево
& Унарная
=> (действительно только внутри %{}) Справа налево
| Справа налево
:: Справа налево
when Справа налево
<- \\ Слева направо

Общие операторы

Elixir предоставляет следующие встроенные операторы:

  • + и - - унарный плюс/минус
  • +, -, * и / - основные арифметические операции
  • ++ и -- - конкатенация и вычитание списков
  • and и && - строгая и нестрогая логическая операция "и"
  • or и || - строгая и нестрогая логическая операция "или"
  • not и ! - строгая и нестрогая логическая операция "не"
  • in и not in - принадлежность
  • @ - атрибут модуля
  • .., .. и ..// - создание диапазонов
  • <> - конкатенация бинарных данных
  • |> - конвейер
  • =~ - сопоставление по шаблону (текстовое)

Многие из них могут быть использованы в сторожах; обратитесь к списку разрешенных функций и операторов сторожей.

Кроме того, есть несколько других операторов, которые Elixir распознаёт, но фактически не использует. Подробности об их использовании см. в разделе «Пользовательские и переопределённые операторы» ниже.

Некоторые другие операторы являются специальными формами и не могут быть переопределены:

  • ^ - оператор "закрепления" (pin)
  • . - оператор точки
  • = - оператор сопоставления
  • & - оператор захвата
  • :: - оператор типа

Наконец, эти операторы появляются в таблице приоритетов выше, но имеют значение только в определённых конструкциях:

  • => - см. %{}
  • when - см. Сторожи
  • <- - см. for и with
  • \\ - см. Аргументы по умолчанию

Операторы сравнения

Elixir предоставляет следующие встроенные операторы сравнения (все из которых могут быть использованы в сторожах):

  • == - равно
  • === - строго равно
  • != - не равно
  • !== - строго не равно
  • < - меньше
  • > - больше
  • <= - меньше или равно
  • >= - больше или равно

Единственное отличие между == и === заключается в том, что === строго сравнивает целые числа и числа с плавающей точкой:

iex> 1 == 1.0
true
iex> 1 === 1.0
false

!= и !== являются отрицаниями == и === соответственно.

Пользовательские и переопределённые операторы

Определение пользовательских операторов

Elixir способен обрабатывать предопределённый набор операторов. Невозможно определить новые операторы (в отличие от некоторых других языков). Однако не все операторы, которые Elixir может распознать, используются в Elixir: например, + и || используются Elixir для сложения и логического "или", но <~> не используется (но является допустимым).

Чтобы определить оператор, можно использовать обычные конструкции def* (def, defp, defmacro, и так далее), но с синтаксисом, похожим на способ использования оператора:

defmodule MyOperators do
  # We define ~> to return the maximum of the given two numbers,
  # and <~ to return the minimum.

  def a ~> b, do: max(a, b)
  def a <~ b, do: min(a, b)
end

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

iex> import MyOperators
iex> 1 ~> 2
2
iex> 1 <~ 2
1

Ниже приведена таблица всех операторов, которые Elixir способен распознать, но которые по умолчанию не используются:

  • |||
  • &&&
  • <<<
  • >>>
  • <<~
  • ~>>
  • <~
  • ~>
  • <~>
  • +++
  • ---

Следующие операторы используются модулем Bitwise при импорте: &&&, <<<, >>> и |||. Дополнительную информацию см. в документации по Bitwise.

Обратите внимание, что сообщество Elixir в целом не рекомендует использовать пользовательские операторы. Они могут быть сложными для чтения и понимания, так как у них нет описательного имени, как у функций. Однако в некоторых особых случаях или для создания собственных языков описания (DSL) такие практики могут быть оправданы.

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

← Предыдущая страница Правила именования
Следующая страница → Шаблоны и сторожи

Скачать версию ePub

Создано с помощью ExDoc (v0.32.2) для языка программирования Elixir

© 2012-2024 The Elixir Team
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.16.3/operators.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API