Skip to content
Mostly adequate guide to FP (in javascript, translated to russian)
JavaScript TeX Other
Branch: master
Clone or download
rrramble and maksimf Change 'all arguments' to 'the argument' (#74)
Change 'all arguments' to 'the argument', because the expression has one argument to omit: 'str'.
Latest commit 35b1b0b Dec 11, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
exercises Add recent changes from original + Update Ch08-ru (#57) Sep 1, 2019
images Grand update (#53) Mar 7, 2019
styles Grand update (#53) Mar 7, 2019
support Add recent changes from original + Update Ch08-ru (#57) Sep 1, 2019
.editorconfig Add recent changes from original + Update Ch08-ru (#57) Sep 1, 2019
.generate-summary.pl Add recent changes from original + Update Ch08-ru (#57) Sep 1, 2019
.gitignore Add recent changes from original + Update Ch08-ru (#57) Sep 1, 2019
CONTRIBUTING-ru.md ch08 small update (#55) Mar 25, 2019
CONTRIBUTING.md Grand update (#53) Mar 7, 2019
FAQ-ru.md
FAQ.md Grand update (#53) Mar 7, 2019
LICENSE Grand update (#53) Mar 7, 2019
README-en.md
README.md Update README.md (#73) Dec 2, 2019
SUMMARY-ru.md Update SUMMARY-ru.md (#70) Oct 8, 2019
SUMMARY.md Grand update (#53) Mar 7, 2019
TRANSLATIONS-ru.md update readme and translations (#67) Sep 30, 2019
TRANSLATIONS.md Grand update (#53) Mar 7, 2019
appendix_a-ru.md Grand update (#53) Mar 7, 2019
appendix_a.md Add recent changes from original + Update Ch08-ru (#57) Sep 1, 2019
appendix_b-ru.md Grand update (#53) Mar 7, 2019
appendix_b.md Add recent changes from original + Update Ch08-ru (#57) Sep 1, 2019
appendix_c-ru.md Grand update (#53) Mar 7, 2019
appendix_c.md Add recent changes from original + Update Ch08-ru (#57) Sep 1, 2019
book.json Grand update (#53) Mar 7, 2019
ch01-ru.md Rename files (#51) Mar 7, 2019
ch01.md Rename files (#51) Mar 7, 2019
ch02-ru.md Rename files (#51) Mar 7, 2019
ch02.md Rename files (#51) Mar 7, 2019
ch03-ru.md Add recent changes from original + Update Ch08-ru (#57) Sep 1, 2019
ch03.md Add recent changes from original + Update Ch08-ru (#57) Sep 1, 2019
ch04-ru.md Исправить текст задачи 'Упражнения B' (#76) Dec 11, 2019
ch04.md
ch05-ru.md Add recent changes from original + Update Ch08-ru (#57) Sep 1, 2019
ch05.md Add recent changes from original + Update Ch08-ru (#57) Sep 1, 2019
ch06-ru.md Rename files (#51) Mar 7, 2019
ch06.md Rename files (#51) Mar 7, 2019
ch07-ru.md Add recent changes from original + Update Ch08-ru (#57) Sep 1, 2019
ch07.md Add recent changes from original + Update Ch08-ru (#57) Sep 1, 2019
ch08-ru.md Improve style (ch08-ch09) (#65) Sep 23, 2019
ch08.md Add recent changes from original + Update Ch08-ru (#57) Sep 1, 2019
ch09-ru.md Improve style (ch08-ch09) (#65) Sep 23, 2019
ch09.md Add recent changes from original + Update Ch08-ru (#57) Sep 1, 2019
ch10-ru.md improve style ch10 (#68) Oct 4, 2019
ch10.md Grand update (#53) Mar 7, 2019
ch11-ru.md improve style ch11 (#71) Oct 11, 2019
ch11.md Grand update (#53) Mar 7, 2019
ch12-ru.md improve style ch12 (#72) Nov 6, 2019
ch12.md
package-lock.json Grand update (#53) Mar 7, 2019
package.json Add recent changes from original + Update Ch08-ru (#57) Sep 1, 2019

README.md

cover

Об этой книге

Это книга о функциональной парадигме в целом. Мы будем использовать самый популярный в мире язык функционального программирования — 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

Скачать (на английском)

Собрать книгу самостоятельно

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. Инструкции.

Оглавление

SUMMARY-ru.md

Contributing

CONTRIBUTING-ru.md

Переводы

TRANSLATIONS-ru.md

FAQ

FAQ-ru.md

Планы на будущее

  • Часть 1 (главы 1-7) посвящена основам. Она обновляется по мере обнаружения ошибок (данная книга представляет из себя черновик). Если вы можете предложить исправление — не стесняйтесь!
  • Часть 2 (главы 8-13) рассматривает классы типов, начиная с функторов и монад, и заканчивая traversable. Я надеюсь втиснуть в неё трансформеры монад и аппликативные функторы.
  • Часть 3 (главы 14+) начнет танец на тонкой грани между практическим программированием и академическим абсурдом. Мы рассмотрим комонады, f-алгебры, фри-монады, yoneda и другие категориальные понятия.

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

You can’t perform that action at this time.