はじめに
皆さん。こんにちは!
DreamHanksの254cmです。
今回はLambdaについて説明していきます。
Java記事のまとめはこちらです。
前回の記事は【Java開発】第26回 Objectクラスです。
Lambdaとは?
ラムダ(Lambda)とはJava8から導入された技術であり、メソッドを単純に表現する方法です。
ラムダで作られたメソッドはインターフェースの引数として渡せます。
インターフェースは渡されたラムダメソッドを抽象メソッドの実装として使います。
〇ラムダの特徴
ラムダを利用するとインターフェースの実装クラスを作らなくても抽象メソッドを自由に実装することができます。
つまり、プログラム作成時の手間仕事が省けます。
そして、ラムダは既存のメソッドより作成方が非常に簡単です。
ラムダの長所と短所
〇ラムダの長所
- インターフェースの実装クラスを作成しなくても構いません。
→プログラムの作成にかかる手間が省けます。
2.コードの作成が単純なので可読性が高いです。
〇ラムダの短所
1.再使用が不可能です。
2.再起の使用には不適合です。
3.使い過ぎるとむしろ可読性が減らします。
ラムダの書き方
1 |
(引数) -> {処理} |
ラムダも一種のメソッドであるので、引数を書いても省略しても構いません。
そして、実行する処理が一つの行である場合、括弧{}を省略することができます。
処理が一つのreturnで構成されている場合には括弧を省略できません。
ラムダの使用サンプル
サンプル1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
public class InterfaceSample { public static void main(String[] args) { MethodSample sam1 = new MethodSampleImpl1(); MethodSample sam2 = new MethodSampleImpl2(); System.out.println(sam1.operate(3, 4)); System.out.println(sam2.operate(3, 4)); } } interface MethodSample { public int operate(int x, int y); } class MethodSampleImpl1 implements MethodSample { @Override public int operate(int x, int y) { return x+y; } } class MethodSampleImpl2 implements MethodSample { @Override public int operate(int x, int y) { return x*y; } } |
ラムダを使用せず、インターフェースの抽象メソッドを実装すると
いちいち実装クラスを作成しなければなりません。
サンプル2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public class LambdaSample { public static void main(String[] args) { LambdaInterface lambdaInterface1 = (x,y) -> { System.out.println("x*y"); return x+y; }; LambdaInterface lambdaInterface2 = (x,y) -> { System.out.println("x*y"); return x*y; }; System.out.println(lambdaInterface1.operate(3, 4)); System.out.println(lambdaInterface2.operate(3, 4)); } } @FunctionalInterface interface LambdaInterface { public int operate(int x, int y); } |
上記のサンプルのようにラムダを利用するとサンプル1より可読性が高いソースコードを作成できます。
ラムダを使うためにはインタフェースを関数型のインタフェースで作る必要があります。
関数型のインタフェースは「@FunctionalInterface 」アノテーションが付与されているインタフェースであり、
抽象メソッドを一つしか宣言できないインタフェースです。
サンプル1のように一つのファイルの中にインタフェースと実装クラスを作成した場合には
実装クラスの処理と作成の意図をパットみて把握することができますが、
普段にはインタフェースと実装クラスは各javaファイルに作成されるので、
処理と作成の意図を把握することが難しいです。
しかし、ラムダを使用する場合には実装クラスがいらなく、
抽象メソッドの実装がインタフェースが使われるところで成り立つので可読性が高いです。
Javaはjava.util.functionパッケージを通じていろんな状況でも使える関数型のインタフェースを
すでに定義して提供しています。
java.util.funcionパッケージに関してはこちらを参考すると嬉しいです。
終わりに
今回の記事は以上になります。
次回はStream APIを学びましょう。
ご覧いただきありがとうございます。
コメント