【Scala】Scala ~ 基本編 / Either型 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2023/03/09/000000

で、Scala の Option型をやったが、
今回は、Either型 について扱う。

目次

【1】Either型
 1)Left/Rightの使い分け
【2】サンプル
 例1:With getOrElse
 例2:With foreach
 例3:With map

【1】Either型

* LeftとRightの2つの値が存在するデータ型

1)Left/Rightの使い分け

* 慣例としては、以下の通り。
 + Right(右):正しい値(「Right=正しい」とかけているらしい)
 + Left(左):エラー/例外

【2】サンプル

例1:With getOrElse

package dk.com

object Demo {
  def main(args: Array[String]): Unit = {
    val result1 = divide(4, 2)
    print(s"result1 = ${result1.getOrElse(0)} ") // result1 = 2
    val result2 = divide(4, 0)
    print(s"result2 = ${result2.getOrElse(0)}") // result2 = 0 (データがないから、Elseの0が出力)
  }

  def divide(x: Int, y: Int): Either[Exception, Int] = {
    try {
      Right(x/y)
    } catch {
      case ex: Exception => Left(ex)
    }
  }
}

例2:With foreach

object Demo {
  def main(args: Array[String]): Unit = {
    val right : Either[String, Int] = Right(1)
    right.foreach(println) // 100
    val left : Either[String, Int] = Left("Error")
    left.foreach(println) // 何もしない(空文字すら)
  }
}

例3:With map

object Demo {
  def main(args: Array[String]): Unit = {
    val right : Either[String, Int] = Right(1)
    println(right.map(_ * 2 )) // Right(2)
    val left : Either[String, Int] = Left("Error")
    println(left.map(_ * 2 )) // Left(Error)
  }
}

参考文献

https://bbh.bz/2020/10/19/scala-either-sample/
https://kazchimo.com/2021/04/04/scalaapi-either/

関連記事

Scala ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/03/10/193805
Scala ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/12/184331
Scala ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2023/01/07/000000
Scala ~ 基本編 / Option型 ~
https://dk521123.hatenablog.com/entry/2023/03/09/000000
Scala ~ 基本編 / 例外処理 ~
https://dk521123.hatenablog.com/entry/2023/10/05/000135
Scala ~ 基本編 / パターンマッチング ~
https://dk521123.hatenablog.com/entry/2023/06/06/233614