はじめてのOption型とEither型(Scala)
Option型
Option型とは有効な値(Some)なのか無効な値(None)なのか呼び出し元に委ねるラッパーです。
object Main extends App{ println(divide(10, 0)) println(divide(10, 2)) def divide(x :Int, y :Int): Option[Double] = { if(y == 0) None else Some(x / y) } }
None Some(5.0)
divideメソッドは常にOpiton[Double]型の値を返します。
それゆえ、Javaの例外処理と異なり、参照透過性があります。
Scalaを勉強するにつれれてOption型の認識が変わるみたいです。
【Scala】Optionの使用方法の変遷について | anopara
Either型
Either型はOption型を拡張したもので、例外が発生した原因を突き止める方法を提供します。
object Main extends App{ println(divide(10, 0)) println(divide(10, 2)) def divide(x :Int, y :Int): Either[String, Double] = { if(y == 0) Left("0で割ってはいけない") else Right(x / y) } }
Left(0で割ってはいけない) Right(5.0)
有効な値がRightで無効な値がLeftです。
LeftはString型の型パラメータを持ち、"0で割ってはいけない"という情報を持っています。