見出し画像

関数型プログラミング事始め (2) 効能

関数型プログラミングがはじめての方へ贈る入門の書
前節:定義 次節:変数の苦難
参考書:
・五味 弘「はじめてのLisp関数型プログラミング」技術評論社(2016)
・大山口 通夫、五味 弘「プログラミング言語論」コロナ社(2008)
・五味 弘「関数型プログラミングと数学(ITと数学)」技術評論社(2021)


関数型プログラミングの効能を紹介します。逆に言えば、既存のプログラミングをディスることになります。副作用がないことが関数型プログラミングの特徴のひとつですが、これから色々な効能があります。プログラムの組み合わせが自由にできるというのも大きな効能のひとつです。高階関数などの呪文は副効能(副作用)です。

1.2 関数型プログラミングの効能=副作用がない利点

前節では関数型プログラミングの定義として、副作用のない関数でのプログラミングとしました。(乱暴な定義ですが)一言での定義はこれになります。

(1) 再利用がしやすい

副作用がないため、プログラム(関数)の再利用がしやすくなります。
再利用するときに、副作用を考慮することなく、ただ引数と値だけの関係を考慮すればいいのです。

(2) 並列処理に向いている

副作用がないため、引数と値に関係のない関数は並列に動作することができます。
例. f(g(1), h(2))ではg(1)とh(2)は並列に実行できます。
逆に言えば、g(1)とh(2)に共通の副作用があると、並列には処理ができません。

(3) 組み合わせが自由

副作用がないため、引数と値に関係のない関数の組み合わせや順序は自由にできます。
例. f(1), g(2), h(3)の順序でも、g(2), h(3), f(1)の順序でも大丈夫です。

(4) バグが少ない

バグの原因でよくあるのが、グローバル変数によるバグです。どこかで誰かが勝手にグローバル変数の値を不正に変えてしまうことから起こるバグです。
副作用がないため、このようなバグは起こりません。

(5) テストやデバッグがしやすい

副作用がないため、テストでは引数と値だけに注目して実施すればよく、テストがしやすくなります。

(6) シンプル

関数型プログラミングは引数と値だけの関係でプログラミングするので、考え方がシンプルになります。面倒なことを考える必要がありません。
このシンプルさは重要で、プログラミングしやすく、テストやデバッグがしやすく、さらにバグが少ないことやテストがしやすいことにも繋がっています。

(7) その他の効能(了解性、最適化、動的)

関数型はシンプルなので、プログラムが読みやすく、人に説明しやすく、了解性が向上します。
同様に関数型はシンプルなので、コンパイラが最適化を行いやすくなります。
関数型プログラミングでは関数そのものを引数にできますので、動的なプログラミングができます(後の節で紹介します)。

(8) 効能のまとめ

関数型プログラミングは副作用がない効能は多くあります。上記の再利用、並列処理、組み合わせ、バグ、テストは副作用がないことによる効能です。

関数型プログラミングはシンプルなものです。プログラミングでシンプルさは重要で、これからプログラミングやテスト、デバッグ、最適化、了解性、説明性の効能が生まれます。

(次回予告) 1.3 関数型プログラミングの苦難=難しさの原因

次回は関数型プログラミングの難しさについて紹介します。なぜ難しいのか、その原因はなにかを見ていくことにします。

参考:プログラミング言語はどれがお得?(前編)|五味弘 (note.com)
参考:プログラミング言語はどれがお得?(後編)|五味弘 (note.com)

よろしければサポートをお願いします!