Учебный курс по языку программирования Эликсир.
Курс содержит большое количество упражнений, домашних заданий, и два курсовых проекта. Теории уделяется меньше внимания.
Курс расчитан на программистов, уже владеющих каким-либо языком программирования, и желающим изучить Эликсир. Курс не расчитан на новичков программировании. (И автор считает Эликсир не подходящим для изучения его как первого языка. Лучше начать с более популярных языков, как, например Python или JavaScript).
Часть 1. Основы языка.
Урок №1. Первое знакомство с Elixir.
01.01. Решаем задачу FizzBuzz.
01.02. Интерактивная консоль (iex).
Урок №2. История, мотивация.
02.01. Немного истории.
02.02. Важные свойства BEAM.
02.03. Свойства Эликсир.
02.04. Недостатки BEAM.
02.05. Сфера применения.
Урок №3. Типы данных и операции над ними.
03.00. Типы данных.
03.01. Целые числа (Integer).
03.02. Числа с плавающей точкой (Float).
03.03. Булевые значения (Boolean).
03.04. Атомы и кортежи (Atom & Tuple).
03.05. Списки (List).
03.06. Словари (Map).
03.07. Строки и бинарные данные (String & Binary).
03.08. Системные типы (System Types).
03.09. Сложные типы (Complex Types).
Урок №4. Управление потоком выполнения.
04.01. Pattern Matching.
04.02. Pattern Matching для Map.
04.03. Конструкция case, тела функций, охранные выражения.
04.04. Конструкции cond и if.
04.05. Keyword list, синтаксический сахар и макросы.
Урок №5. Устройство списков. Рекурсивные функции с аккумуляторами.
05.01. Иммутабельность.
05.02. Устройство списков.
05.03. Рекурсия.
05.04. Хвостовая рекурсия.
05.05. Рекурсивные функции с аккумуляторами.
05.06. Неограниченная рекурсия (Unbounded recursion).
Урок №6. Функции высшего порядка.
06.01. Map, Filter.
06.02. Reduce (Fold).
06.03. Модуль Enum.
06.04. Конструкторы списков.
06.05. Модуль Stream.
Урок №7. Пользовательские типы данных.
07.01. Создание проекта.
07.02. Моделирование предметной области.
07.03. Использование Map.
07.04. Использование Struct.
07.05. Struct с указанием типов.
07.06. Алгебраические типы данных.
07.07. Протокол.
07.08. Record.
07.09. Что такое функциональное программирование?
Урок №8. Обработка ошибок.
08.01. Исключения.
08.02. Классы исключений.
08.03. Пользовательские типы исключений.
08.04. Defensive Programming vs Let It Crash.
Урок №9. Композиция функций.
09.01. Задача на композицию функций.
09.02. Решение 1. Вложенные case.
09.03. Решение 2. Каждый case в отдельной функции.
09.04. Решение 3. Использование исключений.
09.05. Решение 4. Монада Result и оператор bind.
09.06. Решение 5. Pipeline.
09.07. Решение 6. do-нотация.
09.08. Что такое монада?
Курсовой проект №1. Work Report.
Часть 2. Многопоточность и OTP.
Урок №10. Многопоточность.
10.01. Работа с процессами на низком уровне.
10.02. Почтовый ящик.
10.03. Связь между процессами.
10.04. Мониторинг процессов.
10.05. MapReduce.
Урок №11. Абстракции над процессами: Task, Agent, GenServer.
11.01. Task.
11.02. Agent.
11.03. Создание GenServer.
11.04. Модуль GenServer.
11.05. Использование GenServer.
Урок №12. Supervisor и Application.
12.01. Supervisor.
12.02. Использование Supervisor.
12.03. Dynamic Supervisor.
12.04. Application.
12.05. Конфигурирование Application.
12.06. Observer.
Урок №13. Open Telecom Platform.
13.01. OTP.
13.02. Релиз.
13.03. Модель акторов.
13.04. Let It Crash.
Урок №14. Erlang Term Storage.
14.01. ETS, DETS.
14.02. Mnesia.
14.03. Persistent Term.
Урок №15. TCP и UDP сокеты.
15.01. UDP Socket.
15.02. TCP Socket.
15.02. Сервер с Acceptor Pool.
15.03. Бинарные и текстовые протоколы.