Это книга о функциональной парадигме в целом. Мы будем использовать самый популярный в мире язык функционального программирования — JavaScript. Некоторые могут подумать, что JS — это плохой выбор, поскольку его нынешняя культура ощущается преимущественно императивной, и ФП явно ей противоречит. Тем не менее, есть основания считать, что лучше всего начинать освоение ФП именно с JS:
-
Вы наверняка используете его на работе каждый день.
Это значит, что вы сможете ежедневно практиковать и применять полученные знания в реальных программах, а не в хобби-проектах по вечерам и выходным, на каком-нибудь эзотерическом функциональном языке.
-
Вам не потребуется изучать всё от начала и до конца, прежде чем начать писать программы.
В чистом функциональном языке без понимания монад вы не сможете вывести значение переменной в консоль или обратиться к DOM-элементу. JS даёт нам возможность овладеть одними приёмами, откладывая изучение других на следующий раз, тем самым позволяя нам выполнять часть работы привычным и известным способом.
-
JS позволяет всё, что требуется для написания первоклассного функционального кода.
В JS есть всё необходимое, чтобы при помощи пары небольших библиотек мимикрировать под язык вроде Scala или Haskell. В настоящее время ООП доминирует в индустрии, но применять его в JavaScript ужасно неудобно — примерно как разбивать палатку на трассе или танцевать чечётку в галошах. Мы приучены повсеместно применять
bind
только для того, чтобыthis
случайно не выскользнуло из-под нас. В нашем арсенале есть несколько костылей для того, чтобы не пострадать от случайно забытогоnew
. Мы даже умеем делать приватные поля при помощи замыканий... Короче, для большинства из нас ФП будет более естественным, чем всё это ООП-барахло.
Несомненно, типизированные функциональные языки лучше подойдут для стиля, который рассматривает эта книга. JavaScript будет для нас средством изучения парадигмы, которую вы сможете применять где угодно. К счастью, функциональные интерфейсы происходят из математики, а потому они вездесущи. Вы будете чувствовать себя дома, пользуясь Swiftz, Scalaz, Haskell, PureScript и любой другой средой, основанной на математике.
Для наилучшего впечатления, можно читать онлайн на Gitbook (на английском). Там есть:
- Боковая панель с оглавлением
- Упражнения, проверяемые прямо в браузере
Чтобы обучение было эффективным и не слишком скучным, по мере того, как я рассказываю вам очередную историю, обязательно поиграйте с приёмами, представленными в этой книге. Некоторые из них будет сложно воспринять с первого раза, их нужно потрогать своими руками (и основательно вывозиться в них), чтобы понять.
Все функции и алгебраические структуры данных, представленные в книге, собраны в приложениях. Их код также доступен в виде npm-модуля:
$ npm i @mostly-adequate/support
Кроме того, упражнения из каждой главы могут быть выполнены в вашем редакторе! Например, выполните упражнения в файлах exercise_*.js
в директории exercises/ch04
и затем выполните команду:
$ npm run ch04
- Скачать PDF (на английском).
- Скачать EPUB (на английском).
- Скачать Mobi (Kindle) (на английском).
git clone https://github.com/MostlyAdequate/mostly-adequate-guide-ru.git
cd mostly-adequate-guide-ru/
npm install
npm run setup
npm run generate-pdf
npm run generate-epub
Важно! Для создания ebook-версии вам необходимо установить
ebook-convert
. Инструкции.
git clone https://github.com/MostlyAdequate/mostly-adequate-guide-ru.git
cd mostly-adequate-guide-ru/
npm install
npm install gitbook-cli -g
Set-ExecutionPolicy RemoteSigned (опционально) *
gitbook install
Установить [calibre](https://calibre-ebook.com/download_windows64) **
Установить переменные среды `ebook-convert` `C:\Program Files\Calibre2` ***
npm run generate-pdf
npm run generate-epub
* Снимает запрет на выполнение сторонних скриптов
** Настройки по генерации книг задаются в этой программе
*** Инструкция по установке переменых среды
- Часть 1 (главы 1-7) посвящена основам. Она обновляется по мере обнаружения ошибок (данная книга представляет из себя черновик). Если вы можете предложить исправление — не стесняйтесь!
- Часть 2 (главы 8-13) рассматривает классы типов, начиная с функторов и монад, и заканчивая traversable. Я надеюсь втиснуть в неё трансформеры монад и аппликативные функторы.
- Часть 3 (главы 14+) начнет танец на тонкой грани между практическим программированием и академическим абсурдом. Мы рассмотрим комонады, f-алгебры, фри-монады, yoneda и другие категориальные понятия.
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.