Ця книга розповідає про парадигму функціонального програмування вцілому. Ми будемо використовувати найбільш популярну у Світі функціональну мову програмування: JavaScript. Комусь може здатись, що це не найкращий вибір, оскільки в даний момент у світі JavaScript переважає імперативність. Проте, я переконаний, що це найкращий спосіб вивчити FP(функціональне програмування) з декількох причин:
-
Ви, вірогідніше за все, щоденно використовуєте його у роботі.
Це дає можливість тренуватись і використовувати на практиці отримані знання кожен день у реальних програмах, а не на власних пет-проектах у нічний час та вихідні дні за допомогою езотеричної ФП мови.
-
Вам не потрібно вивчати все, для того, щоб почати писати програми.
У чистих функціональних мовах програмування ви не можете залогіювати змінну чи отримати вузол DOM без використання монад. Тут ми можемо трохи хитрувати, оскільки ми вчимося очищати нашу кодову базу. Тут також легше розпочати, оскільки JavaScript використовує змішану парадигму, тож ви в будь-який момент зможете підстрахувати себе у разі того, коли вам бракуватиме знаннь.
-
Мова JavaScript надає змогу писати пречудовий функціональний код.
У нас є всі можливості які нам потрібні для імітації таких мов як Scala чи Haskell, за допомогою однієї чи двух бібліотек. Об'єктно-орієнтоване програмування наразі домінує в індустрії, але воно точно незручне у JavaScript. Це нагадує похід по шосе або танок у галошах. Ми змушені повсюди використовувати
bind
, щоб не загубити десьthis
, у нас до сих пір немає класів(щоправда нещодавно в ES6 було внесено трохи синтаксичного цукру), ми можемо отримати численне різноманіття багів та дивакувату поведінку нашого коду, коли ми забуваємо вжити ключове словоnew
, приватні поля доступні нам лише через замикання. Багато хто з нас відчуває, що функціональне програмування є більш прийнятним рішенням.
Тим не менш, типізовані мови функціонального програмування будуть, без жодного сумніву, кращим місцем щоб кодити у стилі, який виклажається у цій книзі. JavaScript буде нашим засобом вивчення парадигми функціонального програмування, а от де ви будете його використовувати - залежить від вас. На щастя, інтерфейси математичні, а тому можуть бути використані будь-де. Ви будете комфортно себе почувати використовуючі такі математично-орієнтовані мови як swiftz, scalaz, haskell, purescript та інші.
git clone https://github.com/DrBoolean/mostly-adequate-guide.git
cd mostly-adequate-guide/
npm install gitbook-cli -g
gitbook init
brew update
brew install Caskroom/cask/calibre
gitbook mobi . ./functional.mobi
Дивіться SUMMARY.md
Дивіться CONTRIBUTING.md
Дивіться TRANSLATIONS.md
Дивіться FAQ.md
- Частина 1 (на данний момент це частини 1-7) це керівнитство з основ. Я оновлююсь одразу як тільки знаходжу помилки, оскільки це початкова чернетка. Почувайте себе вільно та допомагайте!
- Частина 2 (на данний момент частини 8+) будуть звертатись до типових класів, таких як функтори та монади і аж до traversable. Сподіваюсь втиснутись у трансформери та pure application.
- Частина 3 почне балансувати на межі прикладного програмування та академічного абсурду. Ми розглянемо комонади, f-алгебри, вільні монади, yoneda та інші categorical constructs.