Что ж, это начало даже для меня… Итак, давайте возьмемся за руки и начнем!

Самое главное, верно?

Эликсир — это функциональный язык, который является динамическим и компилируемым.

Функциональное программирование — это парадигма программирования, которая рассматривает вычисления как оценку математических функций и избегает переменных состояний и изменяемых данных.

Итак, Elixir создан для создания масштабируемых и минимальных приложений. Давайте поговорим об этом:

Масштабируемость

Код Elixir запускается внутри процессов, представляющих собой легковесные потоки. Они работают изолированно и обмениваются информацией посредством сообщений. Из-за их легкой природы нередко сотни тысяч процессов выполняются на одной машине.

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

Процессы также могут взаимодействовать с другими процессами с разных машин в той же сети.

Отказоустойчивость

Неизбежная правда о программном обеспечении, работающем в производственной среде, заключается в том, что что-то пойдет не так. Даже больше, если принять во внимание сеть, файловые системы и другие сторонние ресурсы.

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

Теперь, когда мы немного знаем, на что способен Эликсир, давайте попробуем кое-что…

Конечно, сначала нам нужно установить его, поэтому перейдите на страницу загрузки Elixir https://elixir-lang.org/install.html и установите его.

Давай выполним первую функцию!

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

Используйте defmodule имя_модуля, чтобы объявить модуль, и используйте def functionName(params), чтобы объявить функцию.

Взгляните на этот пример:

Теперь нам нужно вызвать вашу функцию, для этого сделайте следующее:

Обратите внимание, что файл должен иметь тип .exs. Чтобы выполнить файл, просто вызовите elixir account.exs.

Вот оно! Наша первая функция на Эликсире!

Как насчет еще одного шага?

Представляю вам трубника |›!

Когда вы работаете с функциональной парадигмой, нет объектов или классов, только функции. И не обычная функция, а чистая функция.

Чтобы функция считалась чистой, она должна следовать 2 правилам:

  1. Функция всегда оценивает одно и то же значение результата при одних и тех же значениях аргументов.
  2. Оценка результата не вызывает никакого семантически наблюдаемого побочного эффекта или вывода.

Оператор конвейера решает проблему чистых функций: вложенных вызовов.

Вот пример:

g(f(x), h)

Как видите, функция g имеет функцию f в качестве параметра вместе с каким-то другим значением. Это не так уж и плохо, но подумайте, чем это может стать…

С оператором |› функция меняется на это:

f(x) |> g(h)

Оператор конвейера берет выходные данные функции слева и передает их в качестве первого аргумента при следующем вызове функции. Почти как | оператор из Unix.

Давайте попробуем это на простом коде:

Эта функция принимает полное имя в качестве единственного аргумента и возвращает отформатированную версию имени. Мы используем оператор трубы 2 раза:

  1. при передаче полного имени в функцию String.split
  2. при передаче результата из функции String.split в формат функции

И этого достаточно для быстрого старта, верно?

О, можно ли решить вашу проблему с помощью функционального языка? Тогда выбирайте Эликсир!