第2章. 関数型Java
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
当然のことながら、Lambda式はJavaで関数的なアプローチをするための鍵となる。
この章では、JavaでLambdaを使う方法、Lambdaがなぜ重要なのか、Lambdaを効率的に使う方法、Lambdaが内部でどのように動作するのかを学ぶ。
Java Lambdaとは何か?
Lambda式とは、0個以上のパラメータを持ち、戻り値を持つ可能性のある、Javaコードの1行またはブロックのことである。 簡略化すると、Lambdaは、どのオブジェクトにも属さない匿名メソッドのようなものである:
()->System.out.println("Hello, lambda!")
構文の詳細と、JavaでLambdaがどのように実装されているかを見てみよう。
Lambda構文
JavaのLambdaの構文は、第1章で見たラムダ計算の数学的表記法とよく似ている:
(<parameters>) -> { <body> }
シンタックスは3つの異なる部分で構成されている:
- パラメータ
-
メソッドの引数リストと同じように、カンマで区切られたパラメータのリスト。 ただし、メソッドの引数とは異なり、コンパイラが引数の型を推測できる場合は、引数の型を省略することができる。 暗黙的に型付けされたパラメータと明示的に型付けされたパラメータを混在させることはできない。 パラメータが1つの場合は括弧は必要ないが、パラメータが1つもないか複数存在する場合は括弧が必要である。
- アロー
-
->(矢印)は、パラメータとLambda本体を分離するものである。 に相当する。 - ボディ
-
単一行式またはコードブロック。単一行式には波括弧は必要なく、評価された結果は
return文なしで暗黙的に返される。 本体が単一行式以上で表される場合は、典型的なJavaコードブロックを使用する。値が返される場合は、波括弧で囲み、return文を明示的に使用する必要がある。
これがJavaにおけるラムダの定義である。 ラムダを宣言する方法が複数あるため、例2-1のように、同じラムダを異なる冗長度で書くことができる。
例2-1. 同じLambdaの異なる書き方
(Stringinput)->{returninput!=null;}input->{returninput!=null;}(Stringinput)->input!=nullinput->input!=null
最も冗長なバリエーション:括弧の中に明示的に型付けされたパラメータとボディブロックがある。 ...