関数型プログラミングガイド
『Mostly Adequate Guide to Functional Programming』へようこそ! 本書ではJavaScriptを使った関数型プログラミングの基礎を学びます。
学習内容
- 純粋関数(Pure Functions): 予測可能でテスト可能なコードの作成
- 合成(Composition): 単純な関数から複雑なプログラムを構築
- カリー化(Currying): 再利用性向上のための関数変換
- ファンクター&モナド(Functors & Monads): エレガントなデータ変換処理
- 圏論(Category Theory): 関数型プログラミングの数学的基盤
始め方
関数型プログラミングの旅を第1章: What Ever Are We Doing?からスタートしましょう。
本書について
これは関数型パラダイム全般に関する書籍です。世界で最も普及している関数型プログラミング言語「JavaScript」を使用します。現在の主流が命令型プログラミングである状況では、この選択に疑問を感じる方もいるかもしれません。
しかし次の理由から、JavaScriptはFP学習に最適だと考えています:
日常業務で実際に使用できる 難解なFP言語で夜間や週末に個人プロジェクトを進めるのではなく、習得した知識を実際のプログラムで毎日実践・適用可能です。
事前知識なしでもプログラミング開始可能 純粋関数型言語では、モナドを使用せずに変数をログ出力したりDOMノードにアクセスしたりできません。ここではコードベースを純粋化する過程で少し「ずる」が可能です。また混合パラダイム言語であるため、知識に不足がある領域では従来の手法に戻りつつ学習を進められます。
高品質な関数型コードの記述が可能 小規模なライブラリ1~2個を用いることで、ScalaやHaskellのような言語を模倣するために必要な機能が全て揃っています。オブジェクト指向プログラミングが業界で主流となっていますが、JavaScriptでの実装は明らかに不自然です。これはドライブスルーで寿司を食べるような不自然さに似ています。私たちは至る所で
thisが予期せず変化しないようバインドが必要で、クラス^1はなくnewキーワード忘れ時の奇妙な挙動への回避策が様々存在し、プライベートメンバはクロージャ経由でのみアクセス可能です。私たちの多くにとって、FPの方がより自然に感じられるでしょう。
とはいえ、型付き関数型言語が間違いなく本書のスタイルに最適な環境です。JavaScriptはパラダイムを学ぶ手段であり、適用先は読者次第です。幸い、インターフェースは数学的な性質を持ち普遍的です。Swiftz、Scalaz、Haskell、PureScriptなど数学的な環境でも同様の実装が可能です。
演習問題
各章末に理解度確認の演習問題を用意しています。問題はリポジトリのexercisesディレクトリに配置されています。
サポート機能
本書で使用するサポート関数と代数的データ構造はsupportディレクトリで公開しています。