この記事は ウェブクルー Advent Calendar 2023 1日目の記事です。
はじめに
この記事は、Scalaの学んだことのアウトプットとして書かれた記事です。
細かい仕様については、公式サイトをご参照ください。
https://www.scala-lang.org/api/2.13.3/scala/Option.html
Option型とは?
ScalaにはOption型という型があります。
Option型は値が入っている場合はSome, 入っていない場合はNoneを返します。
val num1 = Option(1)
//num1: Option[Int] = Some(1)
val num2 = Option(null)
//num2: Option[Null] = None
なぜOptionを使うの?
nullを参照しようとすると、NullPointerExceptionになってしまいます、、そのため、nullチェックをする必要がありますが、その記述を漏れなく行うことは難しい場面もあるでしょう。
そこで、nullが入るかもしれない値は、Optionで包むことで、コンパイル時にエラーを発見することができます!
実行時ではなくコンパイル時にエラーを発見できるので、手軽にエラーを発見できます。
Optionで包んだ値にアクセスするにはいくつか方法があり、getOrElseメソッドでは、値が存在する場合は値を返し、存在しない場合はメソッドの引数に渡した値を返します。
ここではパターンマッチを使った方法でアクセスしてみます。
//Noneだった場合を記述しない場合
val num3 : Option[Int] = Option(5)
num3 match {
case Some(a) => a
}
//warning: match may not be exhaustive.
//It would fail on the following input: None
//<日本語訳>
//match式は完全ではない可能性があります。
//次の入力では失敗します:None
このように、warningエラーでNoneの場合が定義されていないと警告がでます。これによってコンパイル時にパターンの抜け漏れがあった場合は警告が出るため、実行時エラーになることがありません!
おわりに
簡単にですが、Option型を使った書き方や使用するメリットについて紹介しました。
ウェブクルーでは一緒に働いてくれる方を絶賛募集中です!
興味のある方はぜひお問い合わせください。
https://www.webcrew.co.jp/recruit/