Введение в 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 – а иногда даже просто его установка – требует немалых навыков. Поэтому, если вы вообще не имеете опыта программирования, добро пожаловать на борт, но имейте в виду, что по пути вам встретится немало сложностей.
Что даст вам эта книга 11 Для кого эта книга не предназначена Эта книга не предназначена тем, кто торопится достичь поставленной цели. Если вы уже знакомы с языком Eli xir, эта книга, скорее всего, вам не нужна, только если вы не ищете неторопливого, постепенного введения. Если вы уже знакомы с языком Erlang, эта книга поможет вам увидеть отличия, но, скорее всего, ключевые понятия, обсуждаемые здесь, вам уже знакомы. Если вы уже знакомы с функциональными языками программирования, это введение покажется вам слишком медленным. Если вы заскучаете, читая эту книгу, смело откладывайте ее в сторону и обратитесь к какой-нибудь другой книге или к электронной документации, рассказывающей о языке в более быстром темпе. Что даст вам эта книга С помощью этой книги вы научитесь писать простые программы на Eli xir. Узнаете, почему Eli xir упрощает создание надежных и легко масштабируемых программ. Здесь вы познакомитесь с терминологией, благодаря чему сможете читать другие ресурсы с информацией о языке Eli xir, которые требуют определенного опыта для их понимания. В теоретическом отношении вы познакомитесь с функциональным программированием. Узнаете, как проектировать программы, основанные на передаче сообщений и рекурсии, и как создавать программы для обработки потоков данных. Самое важное: эта книга откроет ворота в мир разработки конкурентных программ. Даже притом, что это введение познакомит вас лишь с самыми основами открытой телекоммуникационной платформы (Open Telecom Platform, OTP), знание этих основ поможет вам открыть для себя новый, удивительный мир. После овладения синтаксисом и приемами структурирования программ на языке Elixir вы сможете приступить к созданию надежных и масштабируемых приложений, и это потребует от вас намного меньше усилий, чем при использовании других подходов!
Предисловие Как читать эту книгу Эта книга рассказывает историю появления языка Eli xir. Наибольшую пользу вы получите, если будете читать все по порядку, хотя бы первый раз, однако вы можете читать выборочно и возвращаться к непрочитанным главам, если почувствуете, что это необходимо. Сначала вы установите Eli xir и опробуете его интерактивную оболочку IEx. В этой оболочке вы будете проводить много времени, поэтому постарайтесь овладеть ею в полной мере, чтобы чувствовать себя в ней уютно. Затем вы научитесь загружать программный код в оболочку, чтобы получить возможность писать программы за ее пределами, и узнаете, как вызывать и смешивать этот код. Вы детально изучите числа, потому что это самые простые представители базовых структур в Eli xir. Затем вы познакомитесь с атомами, конструкциями сопоставления с образцом и ограничителями – наиболее распространенными элементами программ. После этого вы перейдете к строкам, спискам и рекурсии, лежащей в основе Eli xir. Преодолев несколько тысяч рекурсий вниз и назад, вы перейде те к процессам, ключевым элементам Eli xir, которые используют модель обмена сообщениями для поддержки конкуренции и отказоустойчивости. После освоения основ вы займетесь более детальным изучением приемов отладки и хранения данных, а затем познакомитесь с комп лектом инструментов, которые пригодятся вам в разработке программ на языке Eli xir: открытой телекоммуникационной платформой (Open Telecom Platform, OTP) языка Erlang, которая охватывает не только телефоны. Наконец, вы освоите макросы, средства, придающие языку Eli xir огромную гибкость и позволяющие расширять его. Некоторые предпочитают изучать языки программирования, знакомясь с его словарем, списками операторов, управляющих структур и типов данных. Эти списки также приводятся в книге, но они находятся не в основном тексте книги, а в приложении A. Главное, что должна дать вам эта книга, – научить вас программированию на языке Eli xir. Если вы этого не получили, дайте нам знать! Другие ресурсы Эта книга, возможно, не лучший для вас способ изучить язык Eli xir. Все зависит от того, чему вы хотите научиться и как вы привыкли осваи вать что-то новое. Если вы ищете скоростное введение в язык, обратите внимание на книгу «Programming Eli xir» (Pragmatic Publishers), в которой вы быстро познакомитесь с отличительными чер
Другие ресурсы 13 тами Elixir. Похожее быстрое и более глубокое введение в Elixir вы также найдете в книгах «Elixir in Action» (Manning) и «The Little Elixir & OTP Guidebook» (Manning). Книга «Metaprogramming Elixir» (Pragmatic Publishers) исследует ключевые возможности языка, а книга «Programming Phoenix» (Pragmatic Publishers) подробно опи сывает мощный фреймворк на основе Elixir. Если вам понравятся неспешность и основательность этой книги и у вас появится желание продолжить обучение в том же духе, обратите внимание на книгу «Études for Elixir» (O’Reilly). В ней вы найдете описания коротких программ, которые сможете сами написать на Elixir, более сложные, чем примеры в данной книге. Кроме того, ее структура очень похожа на структуру данной книги. Существует также множество книг, но посвященных не Elixir, а языку Erlang. Однако мы надеемся, что в ближайшее время появится множество новых книг об Elixir. На сайте проекта Elixir вы найдете много руководств, документацию и ссылки на другие ресурсы. Если в изучении Elixir вами движет желание вырваться из наезженной колеи, обязательно прочитайте книгу Брюса Тейта (Bruce Tate) «Seven Languages in Seven Weeks» (Pragmatic Publishers)1, в которой дается обзор языков Ruby, Io, Prolog, Scala, Erlang, Clojure и Haskell. Описание Erlang в ней занимает всего 30 с небольшим страниц, но вполне возможно, что это именно то, что вам нужно. Книги о языке Erlang тоже могут помочь понять, что делает Elixir таким замечательным. Простое введение в Erlang, во многом похожее на эту книгу, вы найдете в книге «Introducing Erlang» (O’Reilly), которая познакомит вас с Erlang и функциональным программированием. Попробуйте прочитать электронную версию книги (которую можно также приобрести в бумажном варианте, выпущенном издательством No Starch Books) с остроумными и забавными иллюстрациями «Learn You Some Erlang for Great Good»2! Также можно порекомендовать классические книги об Erlang с похожими названиями: «Programming Erlang» (Pragmatic Publishers) и «Erlang Programming»3 (O’Reilly). Они очень похожи и во 1 Тeйт Б. Семь языков за семь недель. М.: ДМК Пресс, 2014. 384 с. – Прим. перев. 2 Хеберт Ф. Изучай Erlang во имя добра! М.: ДМК Пресс, 2014. 688 c. – Прим. перев. 3 Чезарини Ф. Программирование в Erlang. М.: ДМК Пресс, 2015. 488 с. – Прим. перев.
Предисловие многом перекликаются друг с другом, и обе могут послужить прекрасными руководствами, если эта книга покажется вам слишком медлительной или если вам требуется руководство, которое можно использовать как справочник. «Erlang Programming» имеет более практическую направленность, тогда как «Programming Erlang» описывает множество деталей, касающихся настройки окружения для программирования на Erlang. Более продвинутое руководство «Erlang and OTP in Action» (Manning) начинается с краткого 72-страничного введения в Erlang и затем обстоятельно описывает применение открытой телекоммуникационной платформы, фреймворка на языке Erlang для создания легко обслуживаемых и расширяемых конкурентных приложений. «Designing for Scalability with Erlang/OTP»1 (O’Reilly) исследует применение OTP и Erlang для решения задач, которые выглядят чрезвычайно сложными в других окружениях. Посетите также веб-сайт проекта Erlang2, где вы найдете последние обновления, документацию, примеры и многое другое. Eli xir изменит вас Прежде чем вы продолжите, мы хотим предупредить вас, что использование языка Eli xir может кардинально изменить ваши взгляды на программирование. Обычное для этого языка сочетание функционального кода, обработки, ориентированной на процессы, и распределенных вычислений в первый момент может показаться чем-то чужеродным. Однако знакомство с Eli xir может изменить ваши подходы к решению задач (причем они могут существенно отличаться от подходов, принятых в языке Erlang) и даже осложнить возврат к другим языкам, окружениям и культурам программирования. Типографские соглашения В этой книге приняты следующие типографские соглашения: Курсив Используется для обозначения новых терминов, адресов электронной почты, имен файлов и расширений имен файлов. 1 Чезарини Ф., Виноски С. Проектирование масштабируемых систем с помощью Erlang/OTP. М.: ДМК Пресс, 2017. 486 c. – Прим. перев. 2 http://www.erlang.org/.
Использование программного кода примеров 15 Моноширинный шрифт Применяется для оформления листингов программ и программных элементов внутри обычного текста, таких как имена переменных и функций, инструкций и ключевых слов. Моноширинный жирный Обозначает команды или другой текст, который должен вводиться пользователем. Моноширинный курсив Обозначает текст, который должен замещаться фактическими значениями, вводимыми пользователем или определяемыми из контекста. Так обозначаются советы, предложения и примечания общего характера. Так обозначаются предупреждения и предостережения. Так выделяются советы и предложения. Использование программного кода примеров В этой книге приводится множество примеров, цель которых – познакомить вас с основными идеями. Примеры сделаны максимально короткими, чтобы вам проще было видеть отличия между ними. Вы можете свободно использовать примеры программного кода из этой книги, как посчитаете нужным, но вы не сможете взять код из этой книги и составить из него законченное приложение (если только не испытываете особую нежность к вычислениям скоростей свободно падающих объектов). Тем не менее примеры помогут вам выяснить шаги, которые необходимо проделать для создания приложения. Код примеров можно загрузить из репозитория GitHub1. (Он также доступен по ссылке Examples в каталоге издательства2.) Данная книга призвана оказать вам помощь в решении ваших задач. Вам не нужно обращаться в издательство за разрешением, если 1 https://github.com/simonstl/introducing-elixir. 2 http://shop.oreilly.com/product/0636920050612.do.
Доступ онлайн
В корзину