Developer

【はじめてのJava】ラムダ式の省略記法【匿名クラスとラムダ式編】
2021.11.30
Lv1

【はじめてのJava】ラムダ式の省略記法【匿名クラスとラムダ式編】

はじめてのJava

このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。


ラムダ式の省略記法

今回の記事では、ラムダ式の省略記法について解説していきます。

目次


ラムダ式の省略記法

ラムダ式を使用した記述では、一定の条件に従って、記述の省略を行うことができます。
ラムダ式の記述を行うことで、プログラムをさらに短くすることができます。
関数型インタフェースを利用して実装する際のプログラムの記述に関して解説していきます。
基本的なラムダ式での構文は以下のようになっていました。

(引数の型名 抽象メソッドの引数名) -> {
	return 戻り値;
}

ここから、いくつかの項目を省略して記述していきます。

①抽象メソッドの引数の型名を省略する

(抽象メソッドの引数名) -> {
	return 戻り値;
}

引数の型名は省略することができます。ただし、引数が2つ以上ある場合には、一部の引数の型名のみ省略することは不可能です。
省略する場合は、すべての引数の型名を省略する必要があります

②処理内容がreturn文のみの場合、{}とreturnキーワードを同時に省略してもよい。

(抽象メソッドの引数名) -> 戻り値;

注意点として、処理がreturn文だけの場合でも、return文だけを省略したり、{}だけを省略することはできません。
省略を行う場合、必ず{}とreturnの両方を省略する必要があります

③抽象メソッドの処理内容が1行だけの場合、{}は省略してもよい。

(抽象メソッドの引数名) -> 処理内容;

戻り値のないメソッドでも、処理内容が1行しかない場合には、{}の省略が可能です。
処理が複数行ある場合には{}を省略することはできません。

④引数が1つだけの場合、引数の部分の()は省略してもよい。その場合、型名は必ず省略する。

抽象メソッドの引数名 -> { 
	処理内容;
}

引数が1つしかない場合には、引数部分の()を省略することができます。
ただし、引数が2つ以上の場合や引数が無い場合は()の省略はできません


上記の省略記法をまとめると、以下のようになります。
以上をまとめると次のようになります。

  • {}を省略しないときは、複数の処理を記述できる。戻り値を戻すためにはreturnキーワードが必須。
  • {}を省略するときは、1つの処理しか書けない。{}を省略して戻り値を戻す場合、returnキーワードも同時に省略する。記述するとコンパイルエラーになる。
  • 引数の型名は省略可能。省略する場合に複数の引数がある場合、すべての引数の型名を省略する。
  • 引数が1つしかない場合、( )を省略可能で、その場合は型名は必ず省略する。それ以外の場合は( )は必ず書く。

サンプルプログラム

上記のラムダ式の省略記法を利用して、ラムダ式で書かれたコードの省略をします。
(例)Functionインタフェースを使ったラムダ式のサンプル

class FunctionSample{
	public static void main(String[] args){
		
		// 全く省略を行わずに記述した場合
		Function<String,Integer> fun1 = (String num) -> {
			return Integer.parseInt(a);
		}; 
		
		// 完全に省略された場合
		Function<String,Integer> fun2 = num -> Integer.parseInt(a);
		
	}
}

上記のサンプルでは、Functionインタフェースのapplyメソッドをオーバライドしています。
記述の省略が行われている部分は以下の通りです。
①メソッドの引数のデータ型の省略
②オーバライドする処理部分の{}の省略、それに応じた「return」句の省略
③引数が1つであるため、引数の()を省略

匿名クラスとラムダ式編・次回の内容

今回で匿名クラスとラムダ式編は終了になります。
すぐにラムダ式の記述を使っていくことは難しいかもしれませんが、ラムダ式を利用することで読みやすいシンプルなコードを書くことができると思いますので、少しずつ慣れていきましょう。


初めてのJavaシリーズの目次はこちら
匿名クラスとラムダ式編の記事一覧はこちら


java 11 の練習問題一覧はこちら
はじめてのJavaシリーズの練習問題一覧はこちら