Spec-Zone.ru › Elixir 1.16

Исходный код Список необязательного синтаксиса

В этом руководстве мы узнали, что синтаксис 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.32.2) для языка программирования Elixir

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

Spec-Zone.ru

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