Skip to Content
Java クックブック、第 4 版
book

Java クックブック、第 4 版

by Ian F. Darwin
May 2025
Intermediate to advanced
638 pages
10h 22m
Japanese
O'Reilly Media, Inc.
Content preview from Java クックブック、第 4 版

第9章. 関数型プログラミングテクニック:関数型インタフェース、ストリーム、並列コレクション

この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com

9.0 はじめに

Javaはオブジェクト指向(OO)言語である。最近、関数型プログラミング(FP)が注目されている。 FPの定義はFP言語ほど多くないかもしれないが、それに近い。 ウィキペディアの関数型プログラミングの定義は以下の通り(https://en.wikipedia.org/wiki/Functional_programming、2013年12月閲覧):

計算を数学関数の評価として扱い、状態や可変性データを避ける。関数型プログラミングは、プログラムの状態ではなく、入力にのみ依存する結果を生成する関数、つまり純粋な数学関数を重視する。関数型プログラミングは宣言型のプログラミングパラダイムであり、プログラミングは式で行われる。関数型コードでは、関数の出力値は関数に入力される引数のみに依存するため、引数xに同じ値を指定して関数fを2回呼び出すと、2回とも同じ結果f(x)が得られる。副作用、つまり関数の入力に依存しない状態の変化を排除することで、プログラムの振る舞いを理解し予測することが非常に容易になる。

FPパラダイムからどのように利点を得ることができるのだろうか? 一つの方法は、FP言語の使用に切り替えることである、1 代表的なものとしては、Haskell、Idris、Ocaml、Erlang、Julia、LISPファミリーなどがある。 しかし、これらのほとんどはJavaのエコシステムから離れる必要がある。 Scalaや Clojureを使うことも検討できる。JVMベースの言語であり、OO言語のコンテキストで関数型プログラミングをサポートしている。 JVM用の最新のJavaライクな言語であるKotlinもある。

しかし、これはJavaクックブックなのだから、Java言語のままで関数型プログラミングの利点をできるだけ多く得ようとしていることは想像がつくだろう。 FPの特徴には以下のようなものがある:

  • 副作用がなく、その結果が入力にのみ依存し、プログラム内の他の場所の可変性状態には依存しない純粋関数。

  • ファーストクラス関数(データとしての関数など)

  • 不変性データ

  • 再帰と遅延評価の多用

純粋関数は完全にself-containedであり、その演算子は入力パラメータと内部ロジックにのみ依存し、プログラムの他の部分の変数状態には依存しない。これは、Javaのような命令型言語の教育を受けた人々には受け入れがたいことかもしれないが、プログラムのテストや正しさの確認が非常に簡単になる!つまり、プログラム内で他に何が起こっていても(複数のスレッドがあっても)、computeValue(27) のようなメソッド呼び出しは常に、無条件に、毎回同じ値を返すということだ(もちろん、現在時刻やランダムシードなど、グローバルな状態であるものは例外である)。

厳密には正しくないが、この章では関数と メソッドという言葉を使い分けている。FPの人たちは関数という言葉を数学的な関数の意味で使うが、Javaではメソッドは単に呼び出すことができるコードを意味する(Javaのメソッド呼び出しは、OO的なものの見方では、オブジェクトに送られるメッセージとも呼ばれる)。

データとしての関数とは関数であるオブジェクトを作成し、それを別の関数に渡したり、別の関数を返す関数を書いたりできることを意味する。 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

最新の Java レシピ

最新の Java レシピ

Ken Kousen
Javaによる関数型プログラミング ―Java 8ラムダ式とStream

Javaによる関数型プログラミング ―Java 8ラムダ式とStream

Venkat Subramaniam, 株式会社プログラミングシステム社
MySQL クックブック、第 4 版

MySQL クックブック、第 4 版

Sveta Smirnova, Alkin Tezuysal

Publisher Resources

ISBN: 9798341650336