Scalaでの例外処理

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
}