概要
Javaにおけるラムダ式について解説します。
ラムダ式とは?
OracleのJavaドキュメントに簡潔な説明があったので引用したいと思います。
まだ「?」という方は、これからわかっていくので、そういうものなんだなぁと思っておいてください。
基本構文
関数型インターフェースの型 変数名 = (引数) -> {処理};
1 2 3 4 5 6 7 |
public class SampleLamda { public static void main(String[] args) { final String str = "Hello Lamda!"; Consumer<String> c = (val) -> System.out.println(val); c.accept(str); } } |
関数型インターフェースには以下があります。
変数スコープ
・ラムダ式の変数はローカル変数と重複してはならない
以下のように、ローカル変数:strと同じ変数名をラムダ式の引数に指定すると、ローカル変数の再定義をしているとみなされてコンパイルエラーになります。
1 2 3 4 5 6 7 8 9 10 11 |
public class SampleLamda { public static void main(String[] args) { final String str = "Hello Lamda!"; Consumer<String> c = (str) -> System.out.println(val); c.accept(str); } } Exception in thread "main" java.lang.Error: Unresolved compilation problems: Lambda expression's parameter str cannot redeclare another local variable defined in an enclosing scope. val を変数に解決できません |
・ラムダ式の処理で再利用できる変数はfinalまたは実質的にfinalある必要がある
othreStrをラムダ式の行のあとで、modifyメソッドで上書きする処理をしています。
これにより、othreStrは実質的にfinalではなくなるため、コンパイルエラーになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class SampleLamda { public static void main(String[] args) { final String str = "Hello Lamda!"; String othreStr = "othre String!"; Consumer<String> c = (val) -> System.out.println(val + othreStr); othreStr = modify(); // これを無くせばコンパイルエラーは解消される c.accept(str); } private static String modify() { return ""; } } Exception in thread "main" java.lang.Error: Unresolved compilation problem: Local variable othreStr defined in an enclosing scope must be final or effectively final |
試験対策
Java Silverを受験する場合に押さえて置くポイントについてです。
理解しておくべきは、個々の関数型インターフェースの特徴と基本的な使い方です。
あとは、変数のスコープといったところです。
Java Silverの試験ではラムダ式に関しては2問ほどしか出題されない可能性があります。
これは徹底攻略Java SE 11 Silver問題集[1Z0-815]対応(通称:黒本)の模擬試験2回分を調べた結果なので、実際の試験でも必ず2問しか出ないというわけではないことはご承知おき下さい。
(もし出題されても2問程度なので、どうしてもわからない場合は最初から捨てるという選択もできるという意味でお伝えさせて頂いています)
まとめ
- ラムダ式とは、機能をメソッド引数として処理したり、コードをデータとして扱うことができるものである。
- 基本構文は、関数型インターフェースの型 変数名 = (引数) -> {処理}; である。
- 変数スコープにおいては以下2点に注意する。
・ラムダ式の変数はローカル変数と重複してはならない
・ラムダ式の処理で再利用できる変数はfinalまたは実質的にfinalある必要がある - Java Silverの試験にラムダ式は2問ほどしか出題されない想定である。
コメント