Spec-Zone.ru › Elixir 1.18

Источник Таблица необязательного синтаксиса

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

iex> length([1, 2, 3]) == length [1, 2, 3]
true

и что do-end блоки эквивалентны списку ключевых слов:

# do-end blocks
iex> if true do
...>   :this
...> else
...>   :that
...> end
:this

# keyword lists
iex> if true, do: :this, else: :that
:this

Список ключевых слов использует стандартную нотацию Elixir для разделения аргументов, где мы разделяем каждую пару ключ-значение запятыми, а каждый ключ следует за :. В do-блоках мы избавляемся от двоеточий, запятых и отделяем каждое ключевое слово новой строкой. Они полезны именно потому, что устраняют избыточность при написании блоков кода. Большую часть времени мы используем синтаксис блоков, но полезно знать, что они эквивалентны.

Эти удобства, которые мы здесь называем «необязательным синтаксисом», позволяют ядру синтаксиса языка быть компактным, не жертвуя при этом читаемостью и выразительностью вашего кода. В этой краткой главе мы рассмотрим четыре правила, заданные языком, используя короткий фрагмент в качестве среды разработки.

Обзор

Рассмотрим следующий код:

if variable? do
  Call.this()
else
  Call.that()
end

Теперь давайте удалим удобства по одному:

  1. do-end блоки эквивалентны ключевым словам:

    if variable?, do: Call.this(), else: Call.that()
  2. Список ключевых слов в качестве последнего аргумента не требует квадратных скобок, но давайте добавим их:

    if variable?, [do: Call.this(), else: Call.that()]
  3. Список ключевых слов эквивалентен списку кортежей из двух элементов:

    if variable?, [{:do, Call.this()}, {:else, Call.that()}]
  4. Наконец, круглые скобки необязательны для вызовов функций, но давайте добавим их:

    if(variable?, [{:do, Call.this()}, {:else, Call.that()}])

Вот и всё! Эти четыре правила определяют необязательный синтаксис, доступный в Elixir.

Чтобы понять, почему эти правила важны, мы можем кратко сравнить Elixir со многими другими языками программирования. Большинство языков программирования имеют несколько ключевых слов для определения методов, функций, условных операторов, циклов и так далее. Для каждого из этих ключевых слов есть свои синтаксические правила.

Однако в Elixir ни одна из этих функций языка не требует специальных «ключевых слов»; вместо этого все они основаны на этом небольшом наборе правил. Другой плюс в том, что разработчики могут расширять язык таким образом, который соответствует самому языку, поскольку конструкции для проектирования и расширения языка одинаковы. Мы подробнее рассмотрим эту тему в руководстве «Метапрограммирование».

В конечном счете, эти правила позволяют нам писать:

defmodule Math do
  def add(a, b) do
    a + b
  end
end

вместо:

defmodule(Math, [
  {:do, def(add(a, b), [{:do, a + b}])}
])

Если у вас есть какие-либо вопросы, этот краткий обзор вам поможет.

Наконец, если вас интересует, когда применять эти правила, стоит отметить, что форматировщик Elixir обрабатывает эти вопросы за вас. Большинство разработчиков Elixir используют задачу mix format для форматирования своих баз кода в соответствии с хорошо определённым набором правил, определённых командой Elixir и сообществом. Например, mix format всегда добавляет круглые скобки к вызовам функций, если явно не настроено по-другому. Это способствует поддержанию согласованности во всех базах кода внутри организаций и в более широком сообществе.

← Предыдущая страница Написание документации
Следующая страница → Библиотеки Erlang

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

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

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

Spec-Zone.ru

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