Option型の良いところ

1 min read読了の目安(約600字
if (v == null) {
// nullのときの処理
} else 
// null以外のときの処理
}

こう書くと、一番注目したいnull以外のときが後ろに出てきて、「まだ?」って気持ちになる。だってたいてい値が有るときの処理が基本ルートで、nullのときが代替ルートだよね?

だからと言って…

if (v != null) {
// null以外のときの処理
} else {
// nullのときの処理
}

こう書いてもいいと言えばいいけど、やっぱりnullって文字が先に出てくるのが気に入らない。

その点、Option型を使えば…

val v = Some(2)
val r = v.map { _ + 1 }.getOrElse(0)

みたいに先に基本ルートとなる値が有るときのルートを書き、後ろに代替ルートとなる値が無いときのルートが書ける。余計な情報(値の有無を判断する条件式も出てこない)。

for内包表記のときだって…

for {
  x <- v.orElse(Some(0))
  y <- ...
} yield (x, y)

みたいに、確実に値が有る状態に統一してから処理することもできる(もちろんgetOrElseでもいい)。

Option型を使うメリットは、null安全になることもそうだけど、基本ルートと代替ルートを関心の順番に並べられることじゃないかと思っている。