Java8より導入されたラムダ式ですが、名前は聞いたことがあるけれども実際に利用したことがない方もまだまだ多いのが実状です。
本記事では、ラムダ式の基本や特徴を学びたい初心者の方向けに、Javaにおけるラムダ式の基礎的な部分をご紹介していきたいと思います。
Java8より導入されたラムダ式とは?
Java8より導入された「ラムダ式」はプログラムの記述方法の1つです。
ラムダ式を利用することで、コードを簡潔に記述することが可能となり、コード量が減ることから読みやすいプログラムを作成出来る事にも繋がっていきます。
ラムダ式について
ラムダ式は元々プログラミング言語の「C#」で導入されており、C#でラムダ式を利用していたユーザーからJavaへの導入が切望されていました。
ラムダ式ではアロー演算子(->)を用いて、従来の記述方法よりも簡潔にコードを記述することが可能となります。
これまで複数行で記述されていたコードが、ラムダ式で記述することにより1行にまとめられるようなことも少なくないため、読みやすいコードを記述するために利用者の増えている記述方法です。
ラムダ式はJava8以降では必須の知識?
Java8で新機能として追加されたラムダ式ですが、Java8以降のプログラム作成で必須となるわけではありません。
あくまで記述方法の1つであるため、従来通りコーティングしてもプログラムを作成することは可能です。
しかし、Javaで新しく追加されている機能「Stream API」をはじめとして、ラムダ式の利用を前提とした新しい機能も出てきており、Javaプログラマーとしては早い段階でラムダ式の使い方を学んでおくべきと言えます。
Javaラムダ式の特徴とは?
Javaにおけるラムダ式の特徴や、利用するメリットについてご紹介していきたいと思います。
ラムダ式の特徴
まず、ラムダ式は上述している通り、コードを簡潔に書くことが出来るため可読性が高いのが特徴です。
また、ラムダ式でコードを記述することでJavaのパフォーマンスを最大限に引き出すことが可能となる点も特徴といえます。
Javaはバージョンアップ毎に様々な機能が向上していますが、従来より提供されている機能をそのまま利用していたのでは十分にバージョンアップの恩恵を受けることは出来ません。
提供された新機能を活用してJavaプログラムを作成することで、初めて最大限のパフォーマンスを発揮してくれるようになります。
ラムダ式を利用するメリット
ラムダ式を利用するメリットは関数型インターフェイスの記述を簡潔に出来る点であり、無駄な記述が必要なくなることから本質的な部分に注目しやすくなります。
関数型インターフェイスとは、実装が必要なメソッドを1つだけ保持したインターフェイスのことを指します。
また、ラムダ式はJava8以降で追加されたStreamAPIと呼ばれる機能を利用する際に用いられ、コレクションや配列などを簡単に操作出来るようになっています。
ラムダ式とStreamAPIを利用したデータ処理は、Java8以降のプログラミングで頻出となる非常に便利な機能です。
Javaラムダ式の使い方を理解しよう!
ここからは実際にサンプルコードを交えながらJavaでのラムダ式の記述方法についてご紹介していきたいと思います。
まずはラムダ式に変換する前の匿名クラスを利用したサンプルコードが下記の通りとなります。
import java.util.*; public class Main { public static void main(String[] args) throws Exception { InterfaceSample iSample = new InterfaceSample(){ public String execute(String name) { return "私の名前は" + name + "です。"; } }; System.out.println(iSample.execute("ポテパン")); } } interface InterfaceSample { public String execute(String name); }
上記のサンプルコードを実行した結果は下記の通りとなります。
私の名前はポテパンです。
引数に渡した名前を出力するだけの簡単なサンプルです。
では、サンプルコードをラムダ式で記述した場合にはどうなるのか見ていきましょう。
import java.util.*; public class Main { public static void main(String[] args) throws Exception { InterfaceSample iSample = (name) -> {return "私の名前は" + name + "です。";}; System.out.println(iSample.execute("ポテパン")); } } interface InterfaceSample { public String execute(String name); }
このようにコードを短くすることが可能で、可読性が高まります。
出力結果は、匿名クラスで書いた場合もラムダ式で書いた場合も全く同じ結果となります。
ラムダ式構文の解説
まずサンプルコードを見てもらいましたがラムダ式の構文について解説していきたいと思います。
上記サンプルからラムダ式の部分だけを抜き出したのが下記のコードとなります。
InterfaceSample iSample = (name) -> {return "私の名前は" + name + "です。";};
基本構文は下記の通りで、上記サンプルコードも構文通りとなっていることがご確認頂けます。
インターフェイス名 インスタンス名 = (引数) -> {return 処理内容};
ラムダ式ではここから更に省略記法を用いることが可能で、引数が1つの場合には()を省略可能で、処理内容箇所の「{}とreturn」も省略可能となっています。
サンプルコードのラムダ式を省略記法を用いて簡潔に記述したのが下記のコードとなります。
InterfaceSample iSample = name -> "私の名前は" + name + "です。";;
ラムダ式に慣れていない方は分かりにくく感じるかも知れませんが、ラムダ式に慣れてくると無駄なコーティング作業を省け、簡潔で読みやすいコードを記述することが出来るようになります。
さいごに:Javaでのラムダ式は必須ではないが習得するべき知識
本記事では、Javaにおけるラムダ式の使い方や特徴を基礎的な部分を中心にご紹介してきました。
本文中ではご紹介出来ていませんが、「Stream API」などのJava8以降に追加された機能と組み合わせると更にラムダ式のメリットを享受することが出来るようになります。
今回ご紹介した内容で、ラムダ式の基本的な使い方を理解して頂き、応用編としてご自身でJava8以降で新たに追加された機能を試してみてください。
ラムダ式は必須とは言えないが、Java8以降のプロジェクトを担当するプログラマーとしては習得しておくべき知識と言えそうです。