Перейти к основному содержимому

5.19. Первая программа

Разработчику Архитектору Инженеру

Первая программа

Установка необходимых компонентов

Для работы с Elixir требуется два основных компонента: сам язык Elixir и среда выполнения Erlang/OTP. Они распространяются отдельно, но совместимы между собой в рамках определённых версий. Официальный сайт Elixir (https://elixir-lang.org) содержит актуальные рекомендации по совместимости.

Шаг 1. Установка Erlang/OTP

Erlang/OTP — это платформа, на которой исполняется код Elixir. Без неё Elixir работать не может. Установка зависит от операционной системы.

На macOS
Рекомендуемый способ — использовать менеджер пакетов Homebrew:

brew install erlang

На Ubuntu или Debian
Добавьте официальный репозиторий Erlang Solutions, чтобы получить актуальную версию:

wget https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb
sudo dpkg -i erlang-solutions_2.0_all.deb
sudo apt update
sudo apt install erlang

На Windows
Скачайте установщик с официального сайта Erlang (https://www.erlang.org/downloads). Выберите версию, совместимую с последней стабильной версией Elixir. Установщик добавит Erlang в систему и настроит переменные окружения.

После установки проверьте, что Erlang доступен:

erl -version

Команда должна вывести номер версии, например: Erlang/OTP 26.

Шаг 2. Установка Elixir

Теперь можно установить сам Elixir.

На macOS
Через Homebrew:

brew install elixir

На Ubuntu или Debian
После установки Erlang:

sudo apt install elixir

На Windows
Скачайте установщик с https://elixir-lang.org/install.html. Он автоматически определит наличие Erlang и завершит настройку.

Проверьте установку:

elixir --version

Вывод будет содержать версии Elixir и Erlang, например:

Elixir 1.17.0 (compiled with Erlang/OTP 26)

Это означает, что система готова к работе.


Запуск интерактивной оболочки

Elixir предоставляет интерактивную оболочку под названием IEx (Interactive Elixir). Это мощный инструмент для экспериментов, отладки и изучения языка.

Запустите её командой:

iex

Вы увидите приглашение вида:

Erlang/OTP 26 [erts-14.0] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit]

Interactive Elixir (1.17.0) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>

Теперь можно выполнять любые выражения на Elixir. Например, введите:

"Hello, World!"

Оболочка сразу выведет результат:

"Hello, World!"

Это строка, но она не была напечатана в терминале — она просто возвращена как значение. Чтобы действительно вывести текст на экран, используйте функцию IO.puts/1:

IO.puts("Hello, World!")

Результат:

Hello, World!
:ok

Функция IO.puts/1 выводит строку и возвращает атом :ok, что означает успешное завершение операции. Это стандартная практика в экосистеме Erlang/Elixir — многие функции возвращают кортежи вида {:ok, result} или {:error, reason}, но в простых случаях используется атом :ok.

Нажмите Ctrl+C дважды, чтобы выйти из IEx.


Написание первой программы в файле

Хотя IEx удобен для быстрых экспериментов, реальные программы пишутся в файлах. Создадим скрипт, который при запуске выводит «Hello, World!».

Шаг 1. Создание файла

Откройте текстовый редактор и создайте файл с именем hello.exs. Расширение .exs означает «Elixir script» — такой файл предназначен для однократного выполнения, а не для компиляции в модуль.

Добавьте в него следующее содержимое:

IO.puts("Hello, World!")

Сохраните файл.

Шаг 2. Запуск скрипта

В терминале перейдите в каталог, где находится файл, и выполните:

elixir hello.exs

Вывод:

Hello, World!

Программа завершилась. Это самый простой способ запуска Elixir-кода без создания полноценного проекта.

Обратите внимание: файл с расширением .exs не компилируется в байт-код BEAM, а интерпретируется на лету. Это делает его идеальным для небольших задач, автоматизации или обучения.


Создание полноценного проекта с помощью Mix

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

Шаг 1. Генерация нового проекта

Выполните команду:

mix new hello_world

Mix создаст каталог hello_world со следующей структурой:

hello_world/
├── lib/
│ └── hello_world.ex
├── test/
│ └── hello_world_test.exs
├── .formatter.exs
├── mix.exs
└── README.md

Основной файл программы — lib/hello_world.ex. По умолчанию он содержит модуль с примером функции:

defmodule HelloWorld do
@moduledoc """
Documentation for `HelloWorld`.
"""

@doc """
Hello world.

## Examples

iex> HelloWorld.hello()
:world

"""
def hello do
:world
end
end

Этот код определяет модуль HelloWorld с функцией hello/0, возвращающей атом :world.

Шаг 2. Изменение программы

Отредактируйте файл lib/hello_world.ex, чтобы он выводил «Hello, World!» при запуске. Однако важно понимать: модуль сам по себе ничего не делает — он лишь определяет поведение. Чтобы что-то вывести, нужно вызвать функцию.

Создадим новую функцию, которая печатает приветствие:

defmodule HelloWorld do
def greet do
IO.puts("Hello, World!")
end
end

Теперь нужно запустить эту функцию. Для этого можно воспользоваться IEx в контексте проекта.

Шаг 3. Запуск в IEx

Перейдите в каталог проекта:

cd hello_world

Запустите IEx с подключением к проекту:

iex -S mix

Флаг -S mix означает: «запусти IEx, предварительно выполнив mix для загрузки зависимостей и компиляции кода».

Теперь в оболочке доступен модуль HelloWorld. Вызовите функцию:

HelloWorld.greet()

Результат:

Hello, World!
:ok

Программа работает.

Шаг 4. Создание исполняемой точки входа

Если требуется запускать программу как самостоятельный скрипт (без входа в IEx), можно создать файл lib/hello_world/cli.ex:

defmodule HelloWorld.CLI do
def main(_args) do
HelloWorld.greet()
end
end

Затем укажите эту функцию как точку входа в файле mix.exs. Найдите секцию project и добавьте параметр escript:

def project do
[
app: :hello_world,
version: "0.1.0",
elixir: "~> 1.17",
start_permanent: Mix.env() == :prod,
escript: [main_module: HelloWorld.CLI],
deps: deps()
]
end

Теперь соберите исполняемый файл:

mix escript.build

Эта команда создаст файл hello_world в корне проекта. Запустите его:

./hello_world

Вывод:

Hello, World!

Теперь у вас есть полностью автономная программа на Elixir, которую можно запускать из командной строки.