関数型プログラミングには様々なメリットがあり、それらは関数型プログラミング言語を使っていない場合にも役にたつ。
一番参考にしたいのが『副作用』の問題だ。さんざん指摘されているように、バグの大きな要因の一つが副作用だ。プログラマが意図しない・気づかない・忘れている副作用のために、ソフトウェアは予想外の動作に陥ってバグを生む。関数型言語では、基本的に関数には一切副作用を許さないというポリシーでこの問題に対処しようとする。
非関数型言語でも、このアイデアを活用しよう。プログラムの設計で『副作用のある部分』と『副作用のない部分』を明確に区別してモジュール(クラス、メソッド)を設計するのだ。こうすることで、以下のようなメリットが生まれる。
- 明確で共有しやすい設計ポリシーが得られる
- テストの自動化が容易になる(副作用のないモジュールのテストは比較的容易)
- テストの品質が向上する(上記で自動化率が向上するため)
- コードの再利用性が高まる(副作用のないモジュールは再利用しやすい)
- デバッグの効率が高まる(副作用系バグ、そうでないバグを区別したアプローチ)
残念ながら非関数型言語では言語側のサポート(例:副作用警告みたいなものとか)はないので、モジュールの命名規則などを使って副作用の有無を示すなどの運用上の工夫が必要である。しかし、そのコストを払っても有り余るぐらいのメリットが生じるだろう。