Scalaで例外を扱うための肩であるTry型のサンプルを紹介していきます。
Scala Tryのサンプル
def main(args: Array[String]) : Unit = {
println(trySample(1, 1)) // Success(1)
println(trySample(1, 0)) // Failure(java.lang.ArithmeticException: / by zero)
// 成功時のみ処理を実施
println("=== foreach ===")
trySample(1, 1).foreach(println) // 1
trySample(1, 0).foreach(println) // 何もしない
// 失敗時のみ処理を実施
println("=== failed.foreach ===")
trySample(1, 1).failed.foreach(println) // 1
trySample(1, 0).failed.foreach(println) // 何もしない
// mapで処理
println("=== map ===")
println(trySample(1, 1).map(_ * 2)) // Success(2)
println(trySample(1, 0).map(_ * 2)) // Failure(java.lang.ArithmeticException: / by zero)
// flatMapで処理
println("=== map ===")
println(trySample(1, 1).flatMap(trySample(1, _))) // Success(1)
println(trySample(1, 0).flatMap(trySample(1, _))) // Failure(java.lang.ArithmeticException: / by zero)
// recover
println("=== recover ===")
val res1 = trySample(1, 0).recover {
case e: ArithmeticException => 0
}
println(res1) // Success(0)
// recoverWith(結果をTry型で返したい時に使用)
println("=== recoverWith ===")
val res2 = trySample(1, 0).recoverWith {
case e: ArithmeticException => Try(0)
}
println(res2) // Success(0)
// getOrElse
println("=== getOrElse ===")
println(trySample(1, 1).getOrElse(0)) // 1
println(trySample(1, 0).getOrElse(0)) // 0
}
def trySample(int1 : Int, int2 : Int): Try[Int] = {
Try(int1 / int2)
}