yoshikit1996’s diary

日々勉強したことの備忘録です。

はじめての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で割ってはいけない"という情報を持っています。