Что ж, это начало даже для меня… Итак, давайте возьмемся за руки и начнем!
Самое главное, верно?
Эликсир — это функциональный язык, который является динамическим и компилируемым.
Функциональное программирование — это парадигма программирования, которая рассматривает вычисления как оценку математических функций и избегает переменных состояний и изменяемых данных.
Итак, Elixir создан для создания масштабируемых и минимальных приложений. Давайте поговорим об этом:
Масштабируемость
Код Elixir запускается внутри процессов, представляющих собой легковесные потоки. Они работают изолированно и обмениваются информацией посредством сообщений. Из-за их легкой природы нередко сотни тысяч процессов выполняются на одной машине.
Изоляция позволяет процессам собирать мусор независимо друг от друга, сокращая общесистемные паузы и максимально эффективно используя все ресурсы компьютера.
Процессы также могут взаимодействовать с другими процессами с разных машин в той же сети.
Отказоустойчивость
Неизбежная правда о программном обеспечении, работающем в производственной среде, заключается в том, что что-то пойдет не так. Даже больше, если принять во внимание сеть, файловые системы и другие сторонние ресурсы.
Чтобы справляться со сбоями, Elixir предоставляет супервизоров, которые описывают, как перезапускать части вашей системы, когда что-то идет не так. Благодаря этим супервайзерам все возвращается в известное начальное состояние, которое гарантированно работает.
Теперь, когда мы немного знаем, на что способен Эликсир, давайте попробуем кое-что…
Конечно, сначала нам нужно установить его, поэтому перейдите на страницу загрузки Elixir https://elixir-lang.org/install.html и установите его.
Давай выполним первую функцию!
Все функции должны быть частью модуля, поэтому давайте создадим его.
Используйте defmodule имя_модуля, чтобы объявить модуль, и используйте def functionName(params), чтобы объявить функцию.
Взгляните на этот пример:
Теперь нам нужно вызвать вашу функцию, для этого сделайте следующее:
Обратите внимание, что файл должен иметь тип .exs. Чтобы выполнить файл, просто вызовите elixir account.exs.
Вот оно! Наша первая функция на Эликсире!
Как насчет еще одного шага?
Представляю вам трубника |›!
Когда вы работаете с функциональной парадигмой, нет объектов или классов, только функции. И не обычная функция, а чистая функция.
Чтобы функция считалась чистой, она должна следовать 2 правилам:
- Функция всегда оценивает одно и то же значение результата при одних и тех же значениях аргументов.
- Оценка результата не вызывает никакого семантически наблюдаемого побочного эффекта или вывода.
Оператор конвейера решает проблему чистых функций: вложенных вызовов.
Вот пример:
g(f(x), h)
Как видите, функция g имеет функцию f в качестве параметра вместе с каким-то другим значением. Это не так уж и плохо, но подумайте, чем это может стать…
С оператором |› функция меняется на это:
f(x) |> g(h)
Оператор конвейера берет выходные данные функции слева и передает их в качестве первого аргумента при следующем вызове функции. Почти как | оператор из Unix.
Давайте попробуем это на простом коде:
Эта функция принимает полное имя в качестве единственного аргумента и возвращает отформатированную версию имени. Мы используем оператор трубы 2 раза:
- при передаче полного имени в функцию String.split
- при передаче результата из функции String.split в формат функции
И этого достаточно для быстрого старта, верно?
О, можно ли решить вашу проблему с помощью функционального языка? Тогда выбирайте Эликсир!