現在、VavrというJavaの関数型ライブラリを使っているので、このVavrの使い方メモ
今回はOptionだけ
io.vavr.control.Option
Optionはオブジェクトの参照がnullかもしれないことを明示的に表せるようにしたクラス
オブジェクトをOptionでラップしておけば、nullチェックが不要になるメリットがある
例えば
@Test public void 値がnullじゃない場合() { String name = "value"; Option<String> nameOption = Option.of(name); assertEquals("value", nameOption.getOrElse("empty")); }
@Test public void 値がnullの場合() { String name = null; Option<String> nameOption = Option.of(name); assertEquals("empty", nameOption.getOrElse("empty")); }
このように変数にnullの場合のデフォルト値を割り当てることができるので、オブジェクトがnullであろうとチェックなしで一行で処理することができる
java標準ライブラリにも類似したAPI(java.util.Optional
具体的には以下のような挙動になる
// 1) creates a Some(1) Option<Integer> intOption = Option.of(1); // 2) maps 1 to null and creates a Some(null) Option<String> strOption = intOption.map(i -> null); // 3) calls null.intern() and throws a NullPointerException String s = strOption.map(String::intern) .getOrElse("");
これについては以下の記事で語られている