Scalaでは値が存在しないかもしれない型として、Option[T]という型が存在します。
Javaなどでは値が無いことをNullで示します。
しかし、これだとその値がNullかどうかを常に意識してコーディングする必要があります。
Option型は、その値を使用する時に、必ず規定の手順に従う必要があります。
この制約によって、実行時にNullPointerExceptionでプログラムが落ちることが無くなります。
Option型の基本的な使い方
まずはOption型がどういうものか理解するために、最低限のサンプルコードを見てみます。
def main(arts: Array[String]) : Unit = {
val validStr = Option("有効な文字列")
val invalidStr = Option(null)
// 値が存在するかを確認してからアクセス
if(validStr.isDefined) { // = !validStr.isEmpty
println(validStr.get) // =>有効な文字列
}
// Noneにgetメソッドを使用するとエラーが発生する
println(invalidStr.get) // => NoSuchElementException
}
前述の方法でもOption型を扱えることができるのですが、値が無い場合にExceptionが発生してしまいます。
これではOption型を扱う意味があまりありません。
ScalaのOption型には以下のようにより使いやすい記述が用意されています。
getOrElseを使って安全に値を取り出す
Scalaでは、Option型から安全に値を取り出す方法として、 getOrElse というメソッドが用意されています。
このメソッドを使用することで、Optionに値があればその値を、無い場合は引数で指定したデフォルト値を返します。
def main(arts: Array[String]) : Unit = {
val optionStr = Option("文字列")
val optionNullStr = Option(null)
println(optionStr.getOrElse("空文字")) // 文字列
println(optionNullStr.getOrElse("空文字")) // 空文字
}