try-catch-finally
object Main {
def main(args: Array[String]): Unit = {
// Java と同様に try-catch-finally を利用
// (例外を投げる可能性がある処理であっても利用は必須ではないことが Java との違い)
try {
throw new RuntimeException("例外を投げる")
} catch {
case e: RuntimeException => {
println("今回はここが実行される")
}
case e: Throwable => e.printStackTrace // デフォルト
} finally {
}
// 値を返すことができる
// (finally 内での結果は返り値に影響しない
// try と catch の最後の式の評価値が返る)
val result = try {
throw new RuntimeException("例外を投げる")
123
} catch {
case e: RuntimeException => {
456
}
case e: Throwable => {
789
}
} finally {
println("hi")
}
println(result) //=> 456
}
}
Either
Either は二つの型のどちらかを含む型です。例外が発生する可能性のある処理を含む関数を Either を返すように定義すると、例外発生時のことを気にすることなく Either で統一して返すことができます。関数を利用する側で Either の中身を確認して、例外時の処理を記述できます。
object Main {
def main(args: Array[String]): Unit = {
def func: Either[Throwable, Int] = { // 「左」が例外で「右」は正常時の結果とする。
try {
Right(123) // 正常時には「右」を返す。
} catch {
case e: Throwable => Left(e) // 例外発生時は「左」を返す。
}
}
val result = func
result match { //=> 123
case Left(e) => {
e.printStackTrace
}
case Right(i) => {
println(i)
}
}
}
}
0
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。
関連記事
- Scala 文字列の処理書式指定 object Main { def main(args: Array[String]): Unit = { println("%d + %d = %d".format(1, 1, 2)) //=> 1 + 1 = 2 } } 文字列の比較 ヒアドキュメント 他の言語でいう「ヒアドキュメント」のようなものは """ で囲うことで実現できます。 object Main ...
- Scala 日付に関する処理Date クラスを文字列にフォーマット import java.util.Date object Main { def main(args: Array[String]): Unit = { // format は Date に限らない文字列用の機能です。 println("%d-%d-%d" format (1, 1, 1)) //=> 1-1-1 printl...
- 酢豚の基本的な使い方 (sbt)sbt は Scala および Java を主な対象としたビルドツールです。Scala Build Tool の略ではありませんが、Simple Build Tool という明示的な記述も公式ドキュメントなどには見当りません。以下 sbt の基本的な使用例をまとめます。使用した sbt のバージョンは 0.13 です。 公式ドキュメント [sbt 0.13](http://www.scala-sb...
- Scala 関数のサンプルコード「デフォルト引数」および「Unit 型を返す関数」 object HelloWorld { def main(args: Array[String]): Unit = { def myPrint(myArg: String = "default_value") = println(myArg + "!") val result = myPrint() //=> defau...
- Scala 組み込みの制御構造if-else 条件分岐で知られる if-else は三項演算子のようにも使用されます。 object HelloWorld { def main(args: Array[String]): Unit = { val myVal = if (!args.isEmpty) args(0) else "default" println(myVal) } ...