なりそこないの綴り

エンジニア(予定)まであと半年の学生です。

ラムダ式(Java)

SE8で追加された新機能のラムダ式について。

 

ラムダ式とは


匿名クラスの記述をシンプルにしたもの。

 

今までは、一度しか使わないその場かぎりのクラスを実装する場合、匿名クラスが使われていました。が、可読性が悪く、「?」と、なりがちでした。

ラムダ式を使うことで、匿名クラスをシンプルに実装することが可能です。

 

匿名クラス(無名クラス)


抽象メソッドを持つクラス、インターフェースをその場かぎりで実装した名無しのクラス。

 

コードで書くとこの様になります。

f:id:mori_morio:20171101014147p:plain

その場で中身を実装する事ができ、その場にあった実装が出来ますが、普段なかなか見慣れない書き方なので、私が未熟なだけなのか可読性が低いと感じます。



関数型インターフェース


ラムダ式での実装を目的とした、抽象メソッドが一つだけ存在するインターフェース。

 

抽象メソッドが一つだけならば、他のメソッドがあっても関数型インターフェースと認識されます。

@FunctionalInterfaceアノテーションを付けることで関数型インターフェースとして扱われない場合エラーをはいてくれます。

f:id:mori_morio:20171101014203p:plain

f:id:mori_morio:20171101014216p:plain

SampleInter4は抽象メソッドが二つあるので関数型インターフェースとして扱うことができません。

 

ラムダ式の実装

上記のインターフェースをラムダ式と匿名クラスで実装します。

f:id:mori_morio:20171101014707p:plain

ラムダ式で書いた方がコードが短く、シンプルにかけていると思います。

このラムダ式ですが条件によってさらに短く書くことができます。

 

左辺の省略

インターフェースで既に引数の型は宣言されているので引数の型を省略する事ができます。

f:id:mori_morio:20171101014736p:plain

 

さらに引数が一つの場合()も省略可能です。引数が存在しない場合は省略できません。

f:id:mori_morio:20171101014755p:plain

 

右辺の省略

処理が一文で済む場合{}の省略が可能です。さらに{}が省略されている場合returnも省略可能です。

f:id:mori_morio:20171101014805p:plain

すごく短くなりました。

 

 先ほど説明した関数型インターフェースですが、java.util.functionパッケージにていくつか提供されてます。やる気が出たら今度書いてみようと思います。

 

最近興味のあったラズベリーパイと3.5インチのモニター買ったので、なんか電子工作したいと思います。