序文
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
新しい経験によって引き伸ばされた心は、決して古い次元には戻れない。
オリバー・ウェンデル・ホームズJr.
Java開発者として、私たちは通常、オブジェクト指向プログラミング(OOP)をデータ構造のような開発するものを表現するメタファーとして使用し、プログラムの状態を扱うために主に命令形に焦点を当てたコーディングスタイルを使用することで、この複雑さを和らげようとしている。 OOPは、賢明なソフトウェアを開発するためのよく知られ、実績のあるアプローチではあるが、すべての問題がOOPに適しているわけではない。 私たちは、より適切なツールやパラダイムを利用する代わりに、すべての問題にOOPの原則を押し付けることで、不必要な複雑さを引き起こす可能性がある。 関数型プログラミング(FP)パラダイムは、問題を解決するための別のアプローチを提供する。
関数型プログラミングは新しいアイデアではない。 実際、オブジェクト指向プログラミングよりも歴史が古いのだ!関数型プログラミングが初めて登場したのは、1950年代のコンピューティングの初期で、Lispというプログラミング言語だった。1プログラミング言語で初めて登場し、学界やニッチな分野でごく一般的に使われてきた。 しかし近年、関数型パラダイムへの関心が高まっている。
多くの新しい関数型言語が登場し、非関数型言語もさまざまな程度で関数型機能を取り入れている。 FPの背後にある考え方や概念は、現在ではほとんどすべての主流のマルチパラダイム言語や一般化言語で採用されており、コンテキストや選択した言語に関係なく、何らかの形で関数型プログラミングを使用することができる。 FPの最良の部分を取り入れ、既存のプログラミング方法やソフトウェア開発ツールを補強することを止めるものは何もなく、それが本書の目的である!
本書では、関数型プログラミングの基礎と、その知識をJavaを使って日々の仕事に応用する方法を学ぶことができる。
新しいハードウェアには新しい考え方が必要だ
ムーアの法則は減速しているように見えるが、だからといってハードウェアが進歩していないわけではない。2しかし、シングルコアの性能やさらに高いGHz数に注力する代わりに、メーカーはより多くのコアを支持している。3 そのため、現代のワークロードが、より高速なものよりもより多くのコアを好む新しいハードウェアの利点をすべて享受するためには、生産性を損なったり、さらなる複雑さをもたらしたりすることなく、より多くのコアを有利に使用できるテクニックを採用する必要がある。
並列処理によってソフトウェアを水平方向に拡張することは、OOPでは簡単なことではない。 すべての問題が並列処理に適しているわけではない。 ペンキ塗りの人数を増やせば部屋を早く塗れるかもしれないが、妊娠のスピードを上げるには、人数を増やすわけにはいかない。 問題が直列タスクや相互依存タスクで構成されている場合は、並列処理よりも同時並行処理が望ましい。 しかし、並列性が真に輝くのは、問題がより小さく、関連性のないサブ問題に分解された場合である。 そこで関数型プログラミングの出番となる。 熟語的なFPのステートレスで不変性のある性質は、並列・並行環境にエレガントに適合する、小さく、信頼性が高く、再利用可能で、より高品質なタスクを構築するのに必要なすべてのツールを提供する。
ファンクショナル・マインドセットを採用することで、ツールベルトに新たなツールセットが加わり、日々の開発問題に新しい方法で取り組み、以前よりも簡単かつ安全にコードを拡張できるようになる。 ...