8章ラムダ式で合成
プログラムは人間が読めるように記述されなければならない。そのついでに、機械が実行できるように記述されなければならない。
――Hal Abelson and Jerry Sussman
Java 8には、オブジェクト指向アプローチと関数型スタイルという2つの強力なツールがあります。これらは排他的な関係ではありません。より良いものを構築するために、一緒に使用できます。
オブジェクト指向プログラミングでは、状態を変更させます。オブジェクト指向プログラミングを関数型スタイルと組み合わせると、状態を変更する代わりに、連鎖的に結合した関数に軽量なオブジェクトを渡すことでオブジェクトを変換できます。これは容易に拡張できるコードを生成するために役立ちます。関数の合成方法を変更するだけで異なる結果を生み出すことができるのです。これまでプログラミングの中心だったオブジェクトに加えて、関数という単位も使えるようになります。
本章では関数合成を詳しく説明し、実践的なMapReduceパターンを例として実装します。MapReduceパターンでは独立した計算処理を分散し、それらの処理結果を集約して最終的な結果を計算します。最後にはJDKの力を借りて、この計算処理を簡単に並列化します。
8.1 関数合成の利用
オブジェクト指向パラダイムによって、抽象化、カプセル化、そしてポリモーフィズムを実現できます。このパラダイムにおける一番の弱点は継承です。関数型スタイルのプログラミングでは高階関数を合成します。そして可能な限り不変性を尊重し、関数を利用します。これからは、オブジェクト指向で培った経験を役立てるとともに、新たにJavaに加わったエレガントな関数型スタイルを併せて使えます。
ここでオブジェクト変換を身近なことに例えてみます。小銭が必要になり、10ドル札をくずしてほしいと友達にお願いする場面を考えてみてください。お札が細かく切り刻まれて返ってくるわけではなく、10ドル札は一旦その友達の財布の中に入り、代わりに小銭が出てきます。オブジェクト指向と関数型スタイルはこのようなものです。ある軽量オブジェクトを関数に渡して、別のオブジェクトが登場することを期待するのです。 ...
Get Javaによる関数型プログラミング ―Java 8ラムダ式とStream now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.