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...