kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

初学者向けの Scala Tips (2) - nullからOptionへの変換

Scalanullを使っていいのは小学生までだよねー、というのは冗談ですが、Scala文化圏ではnullを使わないのが原則です(いくつか例外はありますが)。代わりに出てくるのがOption型です。しかし、Scalaでは困ったことにnullを返すJavaのメソッドを呼び出さなければいけない場面がたくさんあります。

たとえば、以下のようなコードを書かなければいけない場面にはしばしば遭遇します。

val javaMap: java.util.Map[String, String] = javaObject.getMapping()
val value: String = javaMap.get(key) // 型注釈はあえて付けている
if(value != null) {
  ...
} else {
  ...
}

さて、ここで困るのが、javaMap.get(key)keyに対応する値が入っていない場合nullを返すため、valueにはnullが入る可能性があるという点です。こんなときは、Option.applyの出番です。上のコードは次のように書き換えることができます。

val javaMap: java.util.Map[String, String] = javaObject.getMapping()
val value: Option[String] = Option(javaMap.get(key)) // 型注釈はあえて付けている
value match {
  case Some(value)
    ...
  case None =>
    ...
}

Scalaからnullを返すかもしれないJavaのメソッドを呼び出すときは、このようにOption.apply浄化することをこころがけましょう(もちろん、対象とするJavaのメソッドがnullを返さないと確信できるケースではその限りではありません)。

それでは、また。