Ця книга розповідає про парадигму функціонального програмування вцілому. Ми будемо використовувати найбільш популярну у Світі функціональну мову програмування: JavaScript. Комусь може здатись, що це не найкращий вибір, оскільки в даний момент у світі JavaScript переважає імперативність. Проте, я переконаний, що це найкращий спосіб вивчити FP(функціональне програмування) з декількох причин:
-
Ви, вірогідніше за все, щоденно використовуєте його у роботі.
Це дає можливість тренуватись і використовувати на практиці отримані знання кожен день у реальних програмах, а не на власних пет-проектах у нічний час та вихідні дні за допомогою езотеричної ФП мови.
-
Вам не потрібно вивчати все, для того, щоб почати писати програми.
У чистих функціональних мовах програмування ви не можете залогіювати змінну чи отримати вузол DOM без використання монад. Тут ми можемо трохи хитрувати, оскільки ми вчимося очищати нашу кодову базу. Тут також легше розпочати, оскільки JavaScript використовує змішану парадигму, тож ви в будь-який момент зможете підстрахувати себе у разі того, коли вам бракуватиме знаннь.
-
Мова JavaScript надає змогу писати пречудовий функціональний код.
У нас є всі можливості які нам потрібні для імітації таких мов як Scala чи Haskell, за допомогою однієї чи двух бібліотек. Об'єктно-орієнтоване програмування наразі домінує в індустрії, але воно точно незручне у JavaScript. Це нагадує похід по шосе або танок у галошах. Ми змушені повсюди використовувати
bind
, щоб не загубити десьthis
, у нас до сих пір немає класів(щоправда нещодавно в ES6 було внесено трохи синтаксичного цукру), ми можемо отримати численне різноманіття багів та дивакувату поведінку нашого коду, коли ми забуваємо вжити ключове словоnew
, приватні поля доступні нам лише через замикання. Багато хто з нас відчуває, що функціональне програмування є більш прийнятним рішенням.
Тим не менш, типізовані мови функціонального програмування будуть, без жодного сумніву, кращим місцем щоб кодити у стилі, який виклажається у цій книзі. JavaScript буде нашим засобом вивчення парадигми функціонального програмування, а от де ви будете його використовувати - залежить від вас. На щастя, інтерфейси математичні, а тому можуть бути використані будь-де. Ви будете комфортно себе почувати використовуючі такі математично-орієнтовані мови як swiftz, scalaz, haskell, purescript та інші.
Для найкращого читатського досвіду, читайте її онлайн через Gitbook.
- Швидкий достучп через сайд-бар
- Вправи у браузері
- Детальні приклади
Щоб навчання було ефективним і ви не нудьгували, поки я розповідаю вам чергову історію, не забудьте пограти з концептами, представленими в цій книзі. Деякі з них можуть бути складними для розуміння на перший погляд і краще зрозуміються, якщо ви "забрудните руки". Всі функції та алгебраїчні структури даних, представлені в книзі, зібрані в додатках. Відповідний код також доступний як npm модуль:
$ npm i @mostly-adequate/support
Альтернативно, вправи кожного розділу можна виконати та завершити у вашому редакторі! Наприклад, завершіть exercise_*.js
у exercises/ch04
, а потім виконайте:
$ npm run ch04
Ви можете знайти попередньо згенеровані PDF та EPUB як артефакти збірки останнього релізу.
⚠️ Ця конфігурація проекту зараз трохи застаріла, тому при локальній збірці можуть виникнути різні проблеми. Ми рекомендуємо використовувати node v10.22.1 та останню версію Calibre, якщо це можливо.
git clone https://github.com/MostlyAdequate/mostly-adequate-guide.git
cd mostly-adequate-guide/
npm install
npm run setup
npm run generate-pdf
npm run generate-epub
Увага! Щоб згенерувати ebook версію вам потрібно буде встановити
ebook-convert
. Інструкції зі встановлення.
Дивіться SUMMARY.md
Дивіться CONTRIBUTING.md
Дивіться TRANSLATIONS.md
Дивіться FAQ.md
- Частина 1 (розділи 1-7) це керівнитство з основ. Я оновлююсь одразу як тільки знаходжу помилки, оскільки це початкова чернетка. Почувайте себе вільно та допомагайте!
- Частина 2 (розділи 8-13) будуть звертатись до типових класів, таких як функтори та монади і аж до traversable. Сподіваюсь втиснути трансформери та pure application.
- Частина 3 (розділи 14+) почнуть балансувати на тонкій межі між практичним програмуванням та академічною абсурдністю. Ми розглянемо комонади, f-алгебри, вільні монади, yoneda та інші категоріальні конструкції.