読者です 読者をやめる 読者になる 読者になる

順次、選択、そして繰り返し

プログラミングのことやITのこと、たまに演劇のことも書きます。

Java8のOptionalを試してみた1

Java8のOptionalでは値が無い場合は
nullではなく、emptyというオブジェクトが返ってくるらしい。

以下、ソースコード
JavaTrial/OptionalTest.java at master · sndstudy/JavaTrial · GitHub

package test.java;

import java.util.Optional;

/**
 * Optionalのテスト
 *
 */
public class OptionalTest {

	public static void main(String[] args) {

		/********************************/
		/*				*/
		/*nullの判定(Optional未使用)	*/
		/*				*/
		/********************************/

		String hoge = "hoge";

		if(null != hoge){
			System.out.println(hoge);
		}


		/********************************/
		/*				*/
		/*nullの判定(Optional使用)	*/
		/*				*/
		/********************************/

		//値をラッパーする
		Optional<String> hogeOpt = Optional.ofNullable(hoge);

		//isPresent()は値がある場合はtrue
		//nullの場合はfalseを返す
		if(hogeOpt.isPresent()){
			//get()で値を取得する
			System.out.println(hogeOpt.orElse(hogeOpt.get()));
		}


		/********************************/
		/*				*/
		/*nullの判定(ラムダ式使用)	*/
		/*				*/
		/********************************/

		//ifPresent()はnull以外の場合に処理を実行する
		hogeOpt.ifPresent(str -> System.out.println(str));


	}

}

今までの値のnull判定はこうだった。

/********************************/
/*				*/
/*nullの判定(Optional未使用)	*/
/*				*/
/********************************/

String hoge = "hoge";

if(null != hoge){
	System.out.println(hoge);
}

Optionalではこうなる

/********************************/
/*				*/
/*nullの判定(Optional使用)	*/
/*				*/
/********************************/

//値をラッパーする
Optional<String> hogeOpt = Optional.ofNullable(hoge);

//isPresent()は値がある場合はtrue
//nullの場合はfalseを返す
if(hogeOpt.isPresent()){
	//get()で値を取得する
	System.out.println(hogeOpt.orElse(hogeOpt.get()));
}

ソースコード量はあまり変わらないが、Optionalを使用することで
"この値は空の可能性がある"ということを明示的にすることができるみたい。


ラムダ式で書くとこうスッキリする。

/********************************/
/*				*/
/*nullの判定(ラムダ式使用)	*/
/*				*/
/********************************/

//ifPresent()はnull以外の場合に処理を実行する
hogeOpt.ifPresent(str -> System.out.println(str));

Java8で追加されたOptionalを使いこなせば、
NullPointerExceptionが起きにくいコードが書けるようになるかも。