BBH
-Biz Branding Hub-
投稿日 : 
2020/10/19
更新日 : 
2020/10/19

【Scala】値が存在しない可能性を示すOption型の使い方

Scalaでは値が存在しないかもしれない型として、Option[T]という型が存在します。
Javaなどでは値が無いことをNullで示します。
しかし、これだとその値がNullかどうかを常に意識してコーディングする必要があります。

Option型は、その値を使用する時に、必ず規定の手順に従う必要があります。
この制約によって、実行時にNullPointerExceptionでプログラムが落ちることが無くなります。

Option型の基本的な使い方

まずは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に値があればその値を、無い場合は引数で指定したデフォルト値を返します。

getOrElseサンプル

def main(arts: Array[String]) : Unit = {
    val optionStr = Option("文字列")
    val optionNullStr = Option(null)
    println(optionStr.getOrElse("空文字"))     // 文字列
    println(optionNullStr.getOrElse("空文字")) // 空文字
}

Profile

管理人プロフィール

都内でITエンジニアをやってます。
変遷:中規模SES→独立系SIer→Webサービス内製開発
使用技術はその時々でバラバラですが、C#、AWSが長いです。
どちらかと言うとバックエンドより開発が多かったです。
顧客との折衝や要件定義、マネジメント(10名弱程度)の経験あり。
最近はJava+SpringBootがメイン。

Recommend