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("空文字")) // 空文字 }