Введение в Elixir: введение в функциональное программирование
Покупка
Издательство:
ДМК Пресс
Перевод:
Киселев Артём Николаевич
Год издания: 2017
Кол-во страниц: 262
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-97060-518-9
Артикул: 688699.02.99
Красивый, мощный и компактный, язык программирования Elixir отлично подходит для изучения функционального программирования, и это практическое руководство покажет, насколько широкими возможностями он обладает. В книге рассказано, как Elixir сочетает в себе надежность языка функционального программирования Erlang с подходом, свойственным языку Ruby, а также мощную поддержку макросов для метапрограммирования. В итоге вы поймете, почему на Elixir так просто писать параллельные, надежные и отказоустойчивые программы, которые легко масштабируются как вверх, так и вниз!
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Симон Сенлорен и Дэвид Эйзенберг Введение в Elixir
Simon St. Laurent and J. David Eisenberg INTRODUCING ELIXIR Getting Started in Functional Programming Second Edition Beijing • Boston • Farnham • Sebastopol • Tokyo
Симон Сенлорен и Дэвид Эйзенберг ВВЕДЕНИЕ В ELIXIR Введение в функциональное программирование Москва, 2017
УДК 004.438Elixir ББК 32.973.3 С31 Сенлорен С., Эйзенберг Д. C31 Введение в Elixir: введение в функциональное программирование / пер. с анг. А. Н. Киселева – М.: ДМК Пресс, 2017. – 262 с.: ил. ISBN 978-5-97060-518-9 Красивый, мощный и компактный, язык программирования Elixir отлично подходит для изучения функционального программирования, и это практическое руководство покажет, насколько широкими возможностями он обладает. В книге рассказано, как Elixir сочетает в себе надежность языка функционального программирования Erlang с подходом, свойственным языку Ruby, а также мощную поддержку макросов для метапрограммирования. В итоге вы поймете, почему на Elixir так просто писать параллельные, надеж ные и отказоустойчивые программы, которые легко масштабируются как вверх, так и вниз! УДК 004.438Elixir ББК 32.973.3 Authorized Russian translation of the English edition of Introducing Elixir, 2nd Edition, ISBN 9781491956779 © 2017 Simon St. Laurent, J. David Eisenberg. This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same. Все права защищены. Любая часть этой книги не может быть воспроиз ведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но по скольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 978-1-491-95677-9 (анг.) © 2017 Simon St. Laurent and J. David Eisenberg ISBN 978-5-97060-518-9 (рус.) © Оформление, издание, ДМК Пресс, 2017
Содержание Предисловие .......................................................................................................10 Глава 1. Устраиваемся поудобнее .................................................19 Установка ......................................................................................................................19 Установка Erlang ...................................................................................................19 Установка Eli xir .....................................................................................................20 Запуск ............................................................................................................................21 Первые шаги ................................................................................................................22 Навигация по тексту и истории команд .......................................................23 Навигация по файлам .........................................................................................23 Сделаем что-нибудь ..................................................................................................24 Вызов функций ...........................................................................................................25 Числа в Eli xir ...............................................................................................................26 Работа с переменными в оболочке .......................................................................28 Глава 2. Функции и модули ...................................................................31 Игры с fn ........................................................................................................................31 И & ..................................................................................................................................33 Определение модулей ..............................................................................................34 От модулей к свободным функциям ...................................................................38 Деление кода на модули ..........................................................................................38 Комбинирование функций с помощью оператора конвейера ....................40 Импортирование функций .....................................................................................41 Значения по умолчанию для аргументов ..........................................................42 Документирование кода ..........................................................................................43 Документирование функций ............................................................................44 Документирование модулей .............................................................................46 Глава 3. Атомы, кортежи и сопоставление с образцом ............................................................................................................48 Атомы .............................................................................................................................48 Сопоставление с образцом и атомы .....................................................................49 Логические атомы ......................................................................................................50
Содержание Ограничители ..............................................................................................................52 Обозначайте подчеркиванием все, что не важно ............................................55 Структуры данных: кортежи ..................................................................................57 Сопоставление с образцом и кортежи ...........................................................58 Обработка кортежей ............................................................................................59 Глава 4. Логика и рекурсия ...................................................................62 Логика внутри функций ..........................................................................................62 Конструкция case ..................................................................................................62 Конструкция cond .................................................................................................65 if или else ..................................................................................................................66 Присваивание значений переменным в конструкциях case и if ...........68 Самый желательный побочный эффект: IO.puts ............................................69 Простая рекурсия .......................................................................................................71 Обратный отсчет ...................................................................................................71 Прямой отсчет ........................................................................................................73 Рекурсия с возвратом значения .......................................................................74 Глава 5. Взаимодействие с человеком .....................................79 Строки ............................................................................................................................79 Многострочные строки ............................................................................................82 Юникод ..........................................................................................................................82 Списки символов .......................................................................................................83 Строковые метки ........................................................................................................84 Запрос информации у пользователя ...................................................................85 Ввод символов .......................................................................................................85 Чтение строк текста .............................................................................................86 Глава 6. Списки .................................................................................................91 Основы списков ..........................................................................................................91 Деление списков на головы и хвосты .................................................................93 Обработка содержимого списков .........................................................................94 Создание списка из головы и хвоста ...................................................................96 Смешивание списков и кортежей ........................................................................99 Создание списка списков ........................................................................................99 Глава 7. Пары имя/значение ............................................................103 Списки ключей ........................................................................................................103 Списки кортежей с несколькими ключами ...................................................105
Содержание 7 Словари ......................................................................................................................106 От списков к отображениям ................................................................................107 Создание отображений ....................................................................................108 Изменение отображений .................................................................................108 Чтение отображений .........................................................................................109 От отображений к структурам ...........................................................................109 Объявление структур ........................................................................................110 Создание и чтение экземпляров структур .................................................110 Использование структур в сопоставлениях с образцом .......................111 Использование структур в функциях..........................................................112 Добавление поведения в структуры .............................................................114 Расширение существующих протоколов....................................................116 Глава 8. Функции высшего порядка и генераторы списков ..............................................................................118 Простые функции высшего порядка .................................................................118 Создание новых списков с помощью функций высшего порядка .........121 Получение информации о списке ................................................................121 Обработка элементов списка с помощью функций ...............................122 Фильтрация значений в списках ..................................................................123 За пределами возможностей генераторов списков .....................................124 Проверка списков ..............................................................................................124 Разбиение списков ............................................................................................125 Свертка списков .................................................................................................126 Глава 9. Процессы ......................................................................................129 Интерактивная оболочка – это процесс ..........................................................129 Порождение процессов из модулей ..................................................................132 Легковесные процессы ..........................................................................................135 Регистрация процесса ............................................................................................136 Когда процесс останавливается .........................................................................137 Взаимодействие между процессами .................................................................138 Наблюдение за процессами .................................................................................141 Наблюдение за движением сообщений между процессами ................143 Разрыв и установка связей между процессами ............................................145 Глава 10. Исключения, ошибки и отладка ...........................152 Виды ошибок ............................................................................................................152 Восстановление работоспособности после ошибок времени выполнения ...............................................................................................................153
Содержание Журналирование результатов выполнения и ошибок ...............................156 Трассировка сообщений ........................................................................................157 Трассировка вызовов функций ..........................................................................159 Глава 11. Статический анализ, спецификации типов и тестирование ..............................................................................161 Статический анализ ...............................................................................................161 Спецификации типов ............................................................................................164 Модульные тесты ....................................................................................................167 Настройка тестов ....................................................................................................170 Встраивание тестов в документацию ...............................................................172 Глава 12. Хранение структурированных данных ..........173 Записи: структурирование данных до появления структур ....................173 Определение записей .......................................................................................174 Создание и чтение записей .............................................................................175 Использование записей в функциях ...........................................................177 Сохранение данных в долговременном хранилище Erlang ......................179 Создание и заполнение таблицы ..................................................................181 Простые запросы ................................................................................................187 Изменение значений .........................................................................................187 Таблицы ETS и процессы ................................................................................188 Следующие шаги ................................................................................................190 Хранение записей в Mnesia .................................................................................191 Настройка базы данных Mnesia ....................................................................191 Создание таблиц.................................................................................................192 Чтение данных ....................................................................................................196 Глава 13. Основы OTP ..............................................................................198 Создание служб с помощью GenServer ...........................................................199 Простой супервизор ...............................................................................................204 Упаковка приложения с помощью Mix ...........................................................209 Глава 14. Расширение языка Eli xir с помощью макросов ...............................................................................213 Функции и макросы ...............................................................................................213 Простой макрос .......................................................................................................214 Создание новой логики .........................................................................................216 Программное создание функций .......................................................................217 Когда (не) следует использовать макросы .....................................................219
Содержание 9 Глава 15. Phoenix .........................................................................................221 Установка базовых компонентов фреймворка ..............................................221 Структура простого Phoenix-приложения .....................................................224 Представление страницы .....................................................................................224 Маршрутизация .................................................................................................225 Простой контроллер .........................................................................................227 Простое представление ....................................................................................228 Вычисления ...............................................................................................................230 Продвижение Eli xir ................................................................................................237 Приложение А. Каталог элементов языка Eli xir .............239 Команды интерактивной оболочки ..................................................................239 Зарезервированные слова ....................................................................................240 Операторы .................................................................................................................241 Ограничители ...........................................................................................................243 Часто используемые функции ............................................................................244 Приложение В. Создание документации с помощью ExDoc ........................................................................................247 Использование ExDoc вместе с Mix .................................................................247 Предметный указатель ..........................................................................251 Об авторах ..........................................................................................................259 Колофон ................................................................................................................260
Предисловие Язык Eli xir предлагает разработчикам мощь функционального и конкурентного языка программирования Erlang, но с более дружественным синтаксисом, обширным набором библиотек и средствами метапрограммирования. Программный код на языке Eli xir компилируется в байт-код Erlang, что позволяет объединять его с программным кодом, написанным на Erlang, и использовать инструменты Erlang. Однако, несмотря на общий фундамент, Eli xir создает ощущение совершенно другого языка, более похожего, пожалуй, на Ruby, чем на Prolog, предшественника Erlang. Книга «Введение в Eli xir» познакомит вас с этим мощным языком. Это издание книги «Введение в Eli xir» охватывает версию 1.4 языка. Мы будем обновлять и дополнять его по мере развития Eli xir. Если вы найдете ошибки или опечатки, сообщите нам, воспользовавшись системой учета ошибок. Кому адресована эта книга Эта книга адресована в основном тем, кто имеет опыт программирования на других языках, но ищет чего-то нового. Может быть, вас интересует весьма практичная и распределенная модель программирования, обладающая преимуществами масштабирования и высокой надежности. Может быть, вы хотите увидеть и понять, что такое «функциональное программирование». Или просто желаете познакомиться с чем-то новым без конкретной цели. Мы полагаем, что функциональный стиль программирования стал намного более доступным гораздо раньше, чем вы научились программировать с использованием других парадигм. Однако знакомство с Eli xir – а иногда даже просто его установка – требует немалых навыков. Поэтому, если вы вообще не имеете опыта программирования, добро пожаловать на борт, но имейте в виду, что по пути вам встретится немало сложностей.