К курсам
AI019 Professional

Программирование на языке Elixir

Полное руководство по функциональному и параллельному программированию на языке Elixir. Охватывает переход от объектно-ориентированного мышления к функциональному, сопоставление шаблонов, неизменяемость, модель актора для параллелизма и создание надежных распределённых систем с использованием OTP.

4.8
30.0h
981 учеников
0 лайки
Искусственный интеллект
Начать обучение

Обзор курса

📚 Краткое содержание

Полное руководство по функциональному и параллельному программированию на языке Elixir. Охватывает переход от объектно-ориентированного мышления к функциональному, сопоставление шаблонов, неизменяемость, модель актора для параллелизма и создание надежных распределённых систем с использованием OTP.

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

Автор: Дэйв Томас

Благодарности: Жозе Валим, Кори Хейнс, Брюс Тейт, Джессика Керр, Энтони Эден, Чад Фоулер, Ким Шриер, Кэндис Каннингем, и Потомак Индексинг.

🎯 Цели обучения

  1. Сравнить модель трансформации данных в Elixir с традиционным программированием на основе состояний.
  2. Настроить интерактивную оболочку Elixir (IEx) и выполнять код Elixir через скрипты и компиляцию.
  3. Применять оператор сопоставления (=), оператор фиксации (^) и символ замены (_) для деконструкции и проверки данных.
  4. Объяснить теоретические и практические последствия неизменяемости для производительности и управления памятью.
  5. Определить и использовать встроенные типы данных Elixir, включая типы значений, системы и коллекций.
  6. Применять правила области видимости переменных и выражение with для управления сложными трансформациями данных.
  7. Создавать и вызывать анонимные функции как стандартным, так и синтаксисом захвата (&).
  8. Реализовывать именованные функции в модулях с использованием сопоставления шаблонов и рекурсии для обработки сложной логики.
  9. Применять условия-ограничения (guard clauses) и параметры по умолчанию для управления потоком выполнения функций.
  10. Разбор и построение списков: Использовать сопоставление шаблонов "голова/хвост" для навигации и построения рекурсивных структур списков.

🔹 Урок 1: Введение в Elixir и сопоставление шаблонов

Обзор: Этот урок представляет язык Elixir как функциональный язык, основанный на трансформации данных, а не на изменении состояния. Студенты узнают, как работать в среде Elixir (IEx), компилировать и запускать скрипты, а также освоить сопоставление шаблонов — фундаментальный механизм, используемый Elixir для привязки переменных и управления потоком выполнения.

Цели обучения:

  • Сравнить модель трансформации данных в Elixir с традиционным программированием на основе состояний.
  • Настроить интерактивную оболочку Elixir (IEx) и выполнять код Elixir через скрипты и компиляцию.
  • Применять оператор сопоставления (=), оператор фиксации (^) и символ замены (_) для деконструкции и проверки данных.

🔹 Урок 2: Неизменяемость и основы Elixir

Обзор: Этот урок исследует фундаментальную философию Elixir — неизменяемость. Студенты узнают, как Elixir рассматривает данные как неизменяемые сущности, преимущества такого подхода для производительности, а также различные встроенные типы — от простых типов значений, таких как атомы и диапазоны, до сложных коллекций, таких как карты и двоичные данные. Урок завершается глубоким изучением области видимости переменных и мощного выражения with.

Цели обучения:

  • Объяснить теоретические и практические последствия неизменяемости для производительности и управления памятью.
  • Определить и использовать встроенные типы данных Elixir, включая типы значений, системы и коллекций.
  • Применять правила области видимости переменных и выражение with для управления сложными трансформациями данных.

🔹 Урок 3: Функции, модули и оператор передачи труб

Обзор: Этот урок посвящён ядру программирования на Elixir — функциональной трансформации. Рассматривается переход от анонимных функций и замыканий к структурированным модулям и именованным функциям. Студенты научатся использовать сопоставление шаблонов, рекурсию и оператор передачи труб для создания краткого, читаемого и поддерживаемого кода при взаимодействии с базовой виртуальной машиной Erlang.

Цели обучения:

  • Создавать и вызывать анонимные функции как стандартным, так и синтаксисом захвата (&).
  • Реализовывать именованные функции в модулях с использованием сопоставления шаблонов и рекурсии для обработки сложной логики.
  • Применять условия-ограничения (guard clauses) и параметры по умолчанию для управления потоком выполнения функций.

🔹 Урок 4: Рекурсивные списки и структуры данных

Обзор: Этот урок охватывает фундаментальные механизмы работы со списками в Elixir через рекурсию, особенно фокусируясь на шаблоне «Голова и хвост» для обработки и построения данных. Переход к сложным структурам — картам, структурам и спискам ключевых слов — предоставляет систему принятия решений для выбора правильной структуры и продвинутые техники манипулирования вложенными данными с помощью модуля Access и теории типов в Elixir.

Цели обучения:

  • Разбор и построение списков: Использовать сопоставление шаблонов "голова/хвост" для навигации и построения рекурсивных структур списков.
  • Реализовать высшие порядки шаблонов: Создать собственные функции map и reduce для трансформации или агрегации данных списка.
  • Выбрать соответствующие структуры данных: Различать карты, структуры и списки ключевых слов на основе требований к производительности, порядку и целостности данных.

🔹 Урок 5: Перечисляемые элементы, потоки и обработка строк

Обзор: Этот урок исследует двойственный подход к обработке коллекций в Elixir: жадный модуль Enum и ленивый, композируемый модуль Stream. Также представлено углубленное изучение трансформации данных через понимания списков и внутренние механизмы строк Elixir, различая списки символов (в одинарных кавычках) и бинарные строки (в двойных кавычках). Студенты научатся обрабатывать сложные структуры данных, работать с бесконечными данными и выполнять низкоуровневую извлечение битов.

Цели обучения:

  • Различать жадную и ленивую оценку при обработке коллекций.
  • Использовать понимания списков с несколькими генераторами и фильтрами для трансформации данных и извлечения информации на уровне битов.
  • Различать строки в одинарных кавычках (списки символов) и строки в двойных кавычках (бинарные строки) и применять соответствующий модуль (List vs. String) для манипуляции.

🔹 Урок 6: Управление потоком, проекты Mix и профессиональные инструменты

Обзор: Этот урок помогает разработчикам перейти от написания изолированных функций на Elixir к созданию, тестированию и мониторингу профессиональных приложений. Рассматриваются расширенные конструкции управления потоком (case, cond), жизненный цикл проекта Mix (от структуры каталогов до исполняемых файлов командной строки) и набор профессиональных инструментов для отладки, тестирования на основе свойств и мониторинга серверов.

Цели обучения:

  • Реализовывать сложную логику ветвления с помощью case, cond и обработки исключений.
  • Структурировать проекты на Elixir с помощью Mix, управлять внешними зависимостями, такими как HTTPoison и Poison, и настраивать среды выполнения приложения.
  • Создавать надёжные тестовые комплекты с использованием ExUnit, DocTest и тестирования на основе свойств с помощью StreamData.

🔹 Урок 7: Параллелизм и распределённые узлы

Обзор: Этот урок рассматривает переход от одно-процессных приложений на Elixir к распределённым системам. Изучается механизм обработки сообщений, сохранение состояния процессов с помощью хвостовой рекурсии и надёжное управление жизненным циклом процессов через ссылки и мониторинг. Наконец, вводится модель распределения виртуальной машины Erlang, обучая подключению узлов, защите с помощью «печеньев» (cookies) и работе с вводом-выводом по сети.

Цели обучения:

  • Реализовывать состоятельные, постоянные процессы с использованием хвостовой рекурсии и таймаутов сообщений.
  • Создавать отказоустойчивые деревья процессов с помощью ссылок (spawn_link) и мониторинга (spawn_monitor).
  • Настроить и подключить распределённые узлы с использованием соглашений об именах, безопасности с помощью «печеньев» и глобальной регистрации процессов.

🔹 Урок 8: Основы OTP: Серверы и контроллеры

Обзор: Этот урок знакомит с платформой Open Telecom Platform (OTP) в экосистеме Elixir, фокусируясь конкретно на поведении GenServer и паттернах Supervisor. Студенты узнают, как создавать надёжные серверные процессы с состоянием, различать синхронный и асинхронный обмен сообщениями, а также реализовывать отказоустойчивые деревья контроля, автоматически управляющие жизненным циклом процессов.

Цели обучения:

  • Определить основные компоненты OTP и реализовать стандартный жизненный цикл обратных вызовов GenServer.
  • Различать и реализовывать синхронные (call) и асинхронные (cast) модели обмена сообщениями.
  • Настроить и развернуть контроллер для мониторинга рабочих процессов и обеспечения надёжности системы при сбоях.

🔹 Урок 9: Сложные архитектуры OTP и управление состоянием

Обзор: Этот урок переходит от отдельных GenServer к проектированию и развертыванию сложных, многокомпонентных приложений на основе OTP. Рассматривается архитектурное проектирование «Дупера» — программы поиска дубликатов файлов, механика спецификаций приложений OTP и продвинутые методы развертывания, включая горячие обновления с помощью Distillery. Кроме того, рассматриваются упрощённые альтернативы управления состоянием, такие как Tasks и Agents, предоставляя систему для выбора подходящего инструмента в зависимости от потребностей в параллелизме.

Цели обучения:

  • Анализировать требования к приложению с помощью пятивопросной модели для выявления ключевых точек и характеристик времени выполнения.
  • Создавать многосерверное приложение на основе OTP («Дупер»), используя специализированные серверы (Results, PathFinder, Gatherer) и динамические контроллеры.
  • Выполнять выпуски кода и горячие обновления с помощью Distillery, включая миграцию состояния через обратный вызов code_change.

🔹 Урок 10: Метапрограммирование, протоколы и безопасность типов

Обзор: Этот урок исследует расширяемость уровня высокого порядка в Elixir, фокусируясь на возможности манипулирования кодом как данными с помощью метапрограммирования и макросов. Студенты узнают, как достичь полиморфизма с помощью протоколов и поведений, структурировать крупномасштабные системы с помощью проектов-зонтиков (Umbrella), а также реализовывать надёжную обработку ошибок. В заключение рассматривается добавление слоя статического анализа с помощью системы типов Elixir и Dialyzer для обеспечения корректности кода.

Цели обучения:

  • Освоить использование quote и unquote для внедрения и изменения блоков кода внутри макросов.
  • Реализовать пользовательские протоколы и поведения для создания полиморфных и повторно используемых структур кода.
  • Создавать многомодульные проекты-зонтики и применять формальные спецификации типов к динамическому коду Elixir.