本書について
これは一般的な関数型パラダイムに関する書籍です。世界で最も普及している関数型プログラミング言語であるJavaScriptを使用します。現在主流の命令型文化に逆行する選択だと感じる方もいるかもしれません。しかし、以下の理由からこれがFPを学ぶ最良の方法だと確信しています:
- 日々の業務で使用している可能性が高い
難解なFP言語で週末に個人プロジェクトを行うのではなく、実際のプログラムで日々得た知識を実践・応用できます
- プログラミング開始時に全概念を学ぶ必要がない
純粋関数型言語では、モナドを使用せず変数をログ出力したりDOMノードを読み取ったりできません。ここではコードベースを純粋化する学習過程で多少のショートカットが可能です。また混合パラダイム言語のため知識に不足があっても既存の手法で補いながら学習を進められます
- 高品質な関数型コードを記述可能
小さなライブラリ1〜2個でScalaやHaskellのような言語機能を模倣できます。オブジェクト指向プログラミングは現在業界を支配していますが、JavaScriptでの実装は明らかに不自然です。高速道路沿いでキャンプするが如く、あるいは長靴でタップダンスするようなものです。私たちはthisが予期せず変化しないよう至る所でbindが必要で、newキーワード忘れ時の奇妙な挙動への回避策があり、プライベートメンバはクロージャ経由でのみアクセス可能です。多くの開発者にとって、FPの方がより自然に感じられるでしょう
型付き関数型言語が間違いなく本書のスタイルに最適な実装環境です。JavaScriptはパラダイム学習の手段であり、適用場所は読者の裁量に委ねます。幸い、インターフェースは数学的なため普遍性があります。Swiftz、Scalaz、Haskell、PureScriptなどの数学指向環境でも同様に活用できるでしょう
オンライン閲覧
最適な閲覧体験のため Gitbookでオンライン閲覧
- クイックアクセスサイドバー
- ブラウザ内演習
- 詳細な例題
コード実践
効率的な学習と退屈防止のため、本書で紹介する概念を実際に試してください。初見では理解が難しい概念も、実際に操作することで理解が深まります 本書で紹介する全関数と代数的データ構造は付録にまとめてあります。対応コードはnpmモジュールとしても利用可能です:
$ npm i @mostly-adequate/support各章の演習はエディタ上で実行可能です。例:exercises/ch04内のexercise_*.jsを完成させ、以下を実行:
$ npm run ch04ダウンロード
最新リリースのビルド成果物から PDFとEPUBを入手
自分で生成
⚠️ プロジェクト環境がやや古いため、ローカルビルドで問題が発生する可能性があります。node v10.22.1とCalibreの最新版の使用を推奨します
nodejsバージョンについて
推奨バージョン(node v10.22.1)は現在やや古いため、システムに未導入の可能性があります。nvmで複数バージョンを管理可能です:
- 必要バージョンのインストール:
nvm install 10.22.1
nvm install 20.2.0- バージョン切り替え:
nvm use 10.22.1
node -v // will show v10.22.1
nvm use 20.2.0
node -v // will show v20.2.0.nvmrcファイルが存在するため、バージョン指定なしでnvm installとnvm useを実行可能:
// being anywhere inside this project
nvm install
node -v // will show v10.22.1完全なコマンドシーケンス
nvm導入済み環境でのPDF/EPUB生成フローは以下の通りです:
git clone https://github.com/MostlyAdequate/mostly-adequate-guide.git
cd mostly-adequate-guide/
nvm install
npm install
npm run setup
npm run generate-pdf
npm run generate-epub注意!電子書籍生成には
ebook-convertが必要です。インストール手順
目次
コントリビューション
翻訳
FAQ
FAQ.md参照
今後の計画
- 第1部(1-7章)は基礎解説です。初版ドラフトのため誤りを見つけ次第更新します。協力歓迎!
- 第2部(8-13章)ではファンクタやモナドなどの型クラスからトラバーサブルまでを扱います。トランスフォーマーと純粋アプリケーションの解説も追加予定
- 第3部(14章以降)では実用プログラミングと学術的絶対性の狭間を探ります。コモナド、F-代数、自由モナド、米田その他圏論的構造を解説予定

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