Javaシルバーの合格を目指して、ラムダ式についてまとめてみました。
もし指摘やアドバイスなどありましたら書いていただけると本当に嬉しく思います。
#ラムダ式とは
まず最初に、ラムダ式のメリットについて書いていきたいと思います。
ラムダ式のメリットとしては、
「抽象メソッドの処理を完結に書くことができる」
というのがメリットとしてあります。
今から、そんな便利なラムダ式の書き方を紹介します
#ラムダ式の書き方
まず最初にラムダ式の構文を紹介します。ラムダ式の構文は
インターフェース名 変数名 = (引数名) -> { 処理内容 };
そして、ラムダ式を書く時に知っておいたほうがいいと思うので知っておいたほうがいいですが、引数名の型を書く必要はありません。
ラムダ式の場合は、引数の型をラムダ式の中に書き込まなくてもJava側できちんと型を推論してくれるので書かなくても大丈夫です。
ラムダ式で実装できるのは、関数型インターフェイスのメソッドです。関数型インターフェースというのは、そのインターフェースの中に入っているメソッドが抽象メソッドかつ一つしかメソッドが入っていない状態です。
関数型インターフェースの中に入っている抽象メソッドは処理が決まっていないので、その中に入れる処理を呼び出した先で決める必要があります。それをラムダ式を使わないで実装するとめっちゃめんどくさいです。いやこれ本当にまじで。
抽象メソッドに対する処理をラムダ式で書こうとすると、
試しに以下のインターフェースInterfaceTestの抽象メソッドのmethodに対して処理を書いてみようと思います。
interface InterfaceTest{
public String method(String name);
}
以下が、そのインターフェースを呼び出して使う部分
InterfaceTest h = new InterfaceTest(){
public String method(String name){
return "Hello" + name;
}
};
こんなふうに、InterfaceTestのオブジェクトを作成して、そのメソッドの中の関数methodに対してなんの処理を入れるのかっていうのを書いていきます。
めんどくさいですよね。それにこんな書き方していたら一回目は大丈夫かもしれませんが、何回かやったら絶対ミスってコンパイルエラー起こすと思います(特に僕みたいに注意力のない人間がやると)
なので、こんな書き方をしないでラムダ式を使って一回で済ませたほうがいいです。
先程の呼び出して使う部分をラムダ式で書くと
InterfaceTest h = name -> { return "Hello" + name; };
また、短文であればreturn文を省略して以下のように書く事ができます。
InterfaceTest h = name -> { "Hello" + name; };
更に省略して短文であれば{}も省略できます。
InterfaceTest h = name -> "Hello" + name; ;
ちなみに、ラムダ式で処理内容が短文のときは中括弧{}を省略できるのですが、この時にreturunを省略するとコンパイルエラーになりますので注意してください。
このようにラムダ式を使うことで
・書く文字数が少なくなるのでタイポが減る(これ大事です。長時間作業で疲れてるときとか特に)
・ソースコードが冗長化しないので可読性が上がる
というの効果があります。
おまけ:読んでくれた方に聞きたいこと(ここちょっと気になってます)
ラムダ式を書く時に引数の欄に抽象メソッドの型を書き込みますか。
初心者なりに考えてみたのですが、引数の部分に僕は型を書かないほうがいいのではないかと思っています。
理由としては、抽象クラスの型をいちいち書いていると、コピペをしていたとしてもコピペする箇所をミスったり、スペルミスに気づかないという事が起きてエラーになることが起きうるので、書かないほうがいいんじゃないかなと思いました。
もしよろしければ皆さんの意見をコメントで教えていただければと思います!
場合によるよってなったら皆さんの好みを聞いてみたいです!!
参考サイト