Учебник Elixir для начинающих
Полный премиум-курс по языку Elixir — от первого выражения в iex до деревьев супервизоров OTP. Вы освоите функциональный стиль и неизменяемость, паттерн-матчинг, оператор конвейера, модуль Enum и рекурсию, а затем — главное: лёгкие процессы BEAM, модель акторов, передачу сообщений и промышленный OTP с GenServer, супервизорами и Application. Каждый урок содержит ASCII-схемы, разбор «под капотом BEAM», частые ошибки, best practices и запускаемые врезки «та же идея на Python».
Курс «Elixir: функциональный язык для масштаба» состоит из 6 разделов и 21 урока: Основы Elixir: первый контакт, Паттерн-матчинг — сердце языка, Функции, модули и конвейер, Коллекции, Enum и рекурсия, Процессы и модель акторов и OTP, GenServer и что дальше. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Основы Elixir: первый контакт
- Что такое Elixir и зачем он нужен
Elixir: функциональный язык на BEAM. Зачем нужен, где применяется, чем отличается от ООП-языков.
- iex, mix и первый проект
Интерактивная оболочка iex, инструмент сборки mix, структура проекта Elixir.
- Базовые типы данных
Атомы, целые и числа с плавающей точкой, строки, булевы, кортежи, списки, ключевые списки и ассоциативные массивы.
- Неизменяемость и привязка имён
Почему данные в Elixir неизменяемы, как работает привязка переменных и оператор match вместо присваивания.
- Что такое Elixir и зачем он нужен
2 Паттерн-матчинг — сердце языка
- Паттерн-матчинг: основы
Сопоставление с образцом: деструктуризация кортежей, списков, map. Главный инструмент Elixir.
- Охранные выражения (guards)
Уточнение шаблонов условиями: when, разрешённые охранные функции, комбинирование.
- Функции с несколькими клаузами
Диспетчеризация по шаблонам аргументов вместо if/else, рекурсия через клаузы, базовый и шаговый случаи.
- Паттерн-матчинг: основы
3 Функции, модули и конвейер
- Модули и функции
Определение модулей, публичные и приватные функции, короткий синтаксис, арность, документация.
- Оператор конвейера |>
Pipe-оператор: чтение кода как цепочки преобразований, передача результата первым аргументом, рефакторинг вложенных вызовов.
- Анонимные функции и захват
Анонимные функции через fn, вызов с точкой, оператор захвата &, функции высшего порядка.
- Модули и функции
4 Коллекции, Enum и рекурсия
- Списки, кортежи и keyword-списки
Когда использовать список, кортеж и keyword list; их характеристики производительности и идиомы.
- Модуль Enum: обход коллекций
map, filter, reduce, sum и другие функции Enum; единый интерфейс обхода списков и map.
- Рекурсия и хвостовые вызовы
Рекурсия как замена циклам, аккумуляторы, хвостовая рекурсия и почему она не переполняет стек на BEAM.
- Генераторы (for) и ленивый Stream
Comprehensions через for с фильтрами, ленивые вычисления Stream и когда они экономят память.
- Списки, кортежи и keyword-списки
5 Процессы и модель акторов
- Процессы и модель акторов
Лёгкие процессы BEAM, spawn, изоляция памяти, модель акторов как основа конкурентности.
- Передача сообщений: send и receive
Отправка сообщений через send, приём через receive, паттерн-матчинг сообщений, mailbox процесса.
- Состояние в процессах, связи и мониторинг
Хранение состояния в цикле процесса, ссылки (links) и мониторы, распространение падений как основа надёжности.
- Процессы и модель акторов
6 OTP, GenServer и что дальше
- Что такое OTP
OTP как набор паттернов и поведений (behaviours) для надёжных систем: зачем не писать процессы руками.
- GenServer: сервер с состоянием
GenServer detail: init, handle_call (синхронно), handle_cast (асинхронно), client API, хранение состояния.
- Супервизоры и деревья надзора
Supervisor, стратегии перезапуска (one_for_one и др.), дерево супервизоров, философия let it crash на практике.
- Приложения, Phoenix и что дальше
OTP Application как корень дерева, краткий обзор Phoenix и LiveView, дорожная карта развития в Elixir.
- Что такое OTP