🗂
Option型の良いところ
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安全になることもそうだけど、基本ルートと代替ルートを関心の順番に並べられることじゃないかと思っている。
Discussion