関数型プログラミングは、構造化プログラミングやオブジェクト指向プログラミングとは大きく発想が異なるプログラミングパラダイムです。関数型プログラミングは、構造化プログラミングやオブジェクト指向プログラミングしか知らない人にとっては新しい発見が多いパラダイムなので、ITエンジニアの幅を広げるという意味でも学ぶべきものです。

 関数型プログラミングとは、数学で言う関数や式を用いてプログラミングを行うパラダイムです。「数学で言う」とわざわざ断っているのは、命令型プログラミングで言う「関数」と、数学で言う「関数」は違うものだからです。数学での関数は、引数に完全に依存して結果を返します。つまり、同じ引数の組が与えられれば、いつでも同じ値を返します。

 一方で一般的な構造化プログラミング言語などでは、関数がグローバル変数や内部変数の状態によっては同じ引数を与えても異なる値を返せるという性質を積極的に用います。

関数型プログラミングと命令型プログラミング
[画像のクリックで拡大表示]

 ここで挙げた数学の関数のような性質を「参照透過性」といい、関数型プログラミングの特徴的な要素の1つです。関数型プログラミングにはさまざまな要素がありますが、ここでは今挙げた参照透過性と高階関数という2つを取り上げます。

 参照透過性には「関数の結果が引数だけに依存すること」「関数が他の関数に影響を与えないこと」という2種類の特徴があります。参照透過であることのメリットはさまざまですが、一例としてテストがやりやすくなることが挙げられます。参照透過な関数の場合、引数のパターンとその結果の組み合わせだけを考えれば済みます。

 一方で参照透過でない関数の場合、データベースに格納されている値や、さまざまな箇所から読み書きができるグローバル変数などの初期状態とテスト後の終了状態についても考慮する必要があり、テストの準備が非常に煩雑になります。

 関数型プログラミングでは参照透過でない部分を可能な限り局所化しようとしたり、参照透過でない部分を明示したりすることが推奨されています。

この先は日経 xTECH Active会員の登録が必要です

日経xTECH Activeは、IT/製造/建設各分野にかかわる企業向け製品・サービスについて、選択や導入を支援する情報サイトです。製品・サービス情報、導入事例などのコンテンツを多数掲載しています。初めてご覧になる際には、会員登録(無料)をお願いいたします。