💨

関数型プログラミング

2024/07/02に公開

関数型プログラミングとは

関数の組み合わせによってプログラムを構成する手法。
グローバルな変数等、外部から影響を受けず、ある関数に対して同じ引数を与えれば必ず同じ答えが返ってくるのが特徴。

数学における関数と同じように宣言的な性質を持っており、宣言型プログラミングの一種と呼ばれている。

よく比較されるのが、手続き型プログラミング。
オブジェクト思考型プログラミングとは対の関係(?)。
オブジェクト思考型プログラミングはクラスや継承を使用して構成されている。

関数型プログラミングとは、手続き型の処理を関数に隠蔽する。
関数の引数と中身の処理が決まっていれば中身の処理を意識する必要はなくなる。

例えば
車の生産工場に、必要な資材を工場に持っていけば工場から完成した車が現れる過程を上記に当てはめてみる。

引数 = 必要な資材
手続き = 車を作る工程
戻り値 = 完成した車

※厳密には車を作る工程をさらに細分化して関数化した方が良いとは思う。

一々、車を作る工程を意識しなくても資材さえ持っていけば車を作れる。

関数型プログラミングのメリット

  • コードの可読性の向上
    • 保守性に優れている
  • 拡張性・再利用性の向上
    • 再利用性に優れている
  • テスト性の向上
    • 引数以外の影響を受けないため、テストが非常に簡単
  • モジュール化の向上
  • Tree Shakingの向上
    Tree Shakingとは実行されていない無駄なコードを削除する作業を指す。

関数型プログラミングのデメリット

  • パフォーマンスチューニングが難しい
  • 状況に応じた柔軟な処理が難しい
  • コンパイルが重くなりがち
  • IOなど、本質的に副作用のある処理の記述が難しい

関数型プログラミングを利用する上でのキーワード

  • 状態管理と処理を分離
    • 副作用そのものである「状態」を管理するの。。。??
  • 純粋関数
  • 不変性

Discussion