Optionalってどんなんだったっけ・・?って時の自分用備忘録記事です。
ざっくりした考え方として「nullが入ってるかもしれないよ」というのが一目でわかる型がOptional型です。
まずは単純なnullチェックの例
if (name != null) {
System.out.println(name);
} else {
System.out.println("名前がないよ");
}
結果はもちろん
// nameに"名前があるよ"と代入されている場合
名前があるよ
// nameがnullだった場合
名前がないよ
これをOptionalでやるとこんな感じ
Optional.ofNullable(name).ifPresentOrElse(result -> System.out.println(result),
() -> System.out.println("名前がないよ"));
この場合も結果は以下の通り
// nameに"名前があるよ"と代入されている場合
名前があるよ
// nameがnullだった場合
名前がないよ
そもそも通常のif文の場合ももっと書き方あるだろ…
とかそういうのは一旦置いておいて上記でやっていることの説明をすると
Optional.ofNullable(name)
の部分で引数の値がnullでない場合、その値を格納したOptinalを返しています。
名前の通りnullを許容するメソッドで、nullだった場合はOptionalのemptyメソッドで生成された空Optionalの返します。
この空のOptional、==new 空のOptionalと比較し…みたいなことはしません。
そこで出てくるのがOptionalクラスのメソッドであるifPresentです。
で、今回ifPresentを使用しようと思ったのですが、色んな場所でifPresentは使うべきではないといった記事をたくさんみました。
どうやら最初に取得したOptionalが空だった場合、elseの処理がめんどくさいって理由がメインの話でした。
なので今回、java9より新たに追加されたifPresentOrElseを使用しました。
ifPresentOrElse(result -> System.out.println(result), () -> System.out.println("名前がないよ"))
パっと見でわかりやすく、最初に取得したOptionalが空かどうかで処理を振り分けられるメソッドです。
こんな感じでnullの可能性がある値に対してif null等でアプローチせずに処理をかけ、
すっきり書けるだけで無くnullチェック忘れ等の防止にもつながるなぁ~みたいな利点があると思います。
今回はOptionalとはどんなもんかっていうことでここまで。