BBH
-Biz Branding Hub-
投稿日 : 
2020/10/19
更新日 : 
2020/10/19

【Scala】Tryのサンプル

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)
}

Profile

管理人プロフィール

都内でITエンジニアをやってます。
変遷:中規模SES→独立系SIer→Webサービス内製開発
使用技術はその時々でバラバラですが、C#、AWSが長いです。
どちらかと言うとバックエンドより開発が多かったです。
顧客との折衝や要件定義、マネジメント(10名弱程度)の経験あり。
最近はJava+SpringBootがメイン。

Recommend