Scala 例外処理

Scalaの例外処理は、Javaなどの他の言語に似てます。

Scalaのメソッドは、返す値を渡さないで、例外をスローして関連するコードの実行を終了できます。

例外をスローする

Scalaは、Javaと同じメソッド(throwメソッド)で例外をスローします。例えば、次のように新しいパラメータ例外をスローします。

throw new IllegalArgumentException

例外をキャッチする

例外をキャッチするメカニズムは他の言語と同じです。例外が発生すると、catch文が順番にキャッチします。そのため、catch文では、より具体的な例外が前面に配置され、より一般的な例外が後ろに配置されます。スローされた例外がcatch文にない場合、例外を処理できず、呼び出し元にエスカレーションされます。

例外をキャッチするcatch文の構文は、他の言語の構文と異なります。 Scalaでは、パターンマッチングのように例外のマッチングを行います。そのため、catchのコードには一連のcase文です。次の例をご覧ください。

実例

import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException

object Test {
   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")
         }
      }
   }
}

上記のコードを実行した出力結果は次となります。

$ scalac Test.scala 
$ scala Test
Missing file exception

catch文の内容は、matchにあるcaseト全く同じです。 例外キャッチが順番に行われているため、最も一般的な例外であるThrowableが先頭に記述されている場合、その後のcaseはキャッチされないため、それを最後に記述する必要があります。

finallyステートメント

finallyステートメントは、例外が発生するかどうかに関係なく、実行する必要のあるステップに使用されます。次の例をご覧ください。

実例

import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException

object Test {
   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...")
      }
   }
}

上記のコードを実行した出力結果は次となります。

$ scalac Test.scala 
$ scala Test
Missing file exception
Exiting finally...
Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です