Scalaでの例外処理は、他の言語系と同じようなノリで使えます。
例外のスロー
例外のスローは普通に throw で行う
object Main extends Application { def hoge(n : Int) = if(n >= 0) n else throw new IllegalArgumentException("n must be a positive number") val n = hoge(-2) }
例外の捕捉
例外の捕捉もJavaなどと同様だが、例外に対する処理のマッピングにはケースクラスが利用できる
object Main extends Application { var f : FileInputStream = _ try { f = new FileInputStream("foo") f.read } catch { case ex: FileNotFoundException => println("File Not Found") case ex: IOException => println("IO Error") } finally { f.close // 通常はローンパターンで実施するのでこのようには書かない } }
また、こんな感じで、値を返すこともできる。
object Main extends Application { def hoge(s : String) = try { Integer.parseInt(s) } catch { case ex: NumberFormatException => 0 } println(hoge("A")) // 0 }