Scala-exception-handling
提供:Dev Guides
Scala-例外処理
Scalaの例外は、Javaのような他の多くの言語の例外のように機能します。 通常の方法で値を返す代わりに、メソッドは例外をスローして終了できます。 ただし、Scalaには実際にチェック例外はありません。
例外を処理する場合、Javaの場合と同様にtry \ {…} catch \ {…}ブロックを使用しますが、catchブロックはマッチングを使用して例外を識別および処理します。
例外を投げる
例外のスローは、Javaの場合と同じです。 例外オブジェクトを作成し、次のように throw キーワードでスローします。
throw new IllegalArgumentException
例外をキャッチする
Scalaでは、1つのブロックで例外を try/catch し、 case ブロックを使用してパターンマッチングを実行できます。 次のサンプルプログラムを試して、例外を処理してください。
例
import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException
object Demo {
def main(args: Array[String]) {
try {
val f = new FileReader("input.txt")
} catch {
case ex: FileNotFoundException =>{
println("Missing file exception")
}
case ex: IOException => {
println("IO Exception")
}
}
}
}
上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
コマンド
\>scalac Demo.scala
\>scala Demo
出力
Missing file exception
この try-catch 式の動作は、例外を除いて他の言語と同じです。 本体が実行され、例外がスローされると、各 catch 句が順番に試行されます。
最終節
式の終了方法に関係なくコードを実行する場合は、 finally 句で式をラップできます。 次のプログラムを試してください。
例
import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException
object Demo {
def main(args: Array[String]) {
try {
val f = new FileReader("input.txt")
} catch {
case ex: FileNotFoundException => {
println("Missing file exception")
}
case ex: IOException => {
println("IO Exception")
}
} finally {
println("Exiting finally...")
}
}
}
上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
コマンド
\>scalac Demo.scala
\>scala Demo
出力
Missing file exception
Exiting finally...