English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tratamento de Exceções Scala

O tratamento de exceções no Scala é semelhante a outros idiomas, como Java.

O método pode ser usado no Scala para interromper a execução do código relacionado, sem a necessidade de retornar um valor.

Lançar exceções

O método de lançamento de exceções no Scala é semelhante ao Java, usando o método throw, por exemplo, lançar uma nova exceção de argumento:

throw new IllegalArgumentException

Capturar exceções

O mecanismo de captura de exceções é semelhante a outros idiomas. Se ocorrer uma exceção, a cláusula catch é capturada por ordem. Portanto, na cláusula catch, as exceções mais específicas devem ser capturadas mais cedo e as exceções mais gerais mais tarde. Se a exceção lançada não estiver na cláusula catch, a exceção não pode ser tratada e será elevada ao chamador.

A cláusula catch para capturar exceções é um pouco diferente de outros idiomas. No Scala, é utilizado o pensamento de correspondência de padrão para fazer correspondência de exceções, portanto, no código da cláusula catch, é uma série de frases case, conforme o exemplo a seguir:

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")
      }
         case ex: FileNotFoundException => {
            println("Exceção de Arquivo Ausente")
         }
         case ex: IOException => {
            println("Exceção IO")
         }
      }
   }
}

Executar o código acima, o resultado de saída será:

$ scalac Test.scala 
$ scala Test
Exceção de Arquivo Ausente

O conteúdo da cláusula catch é idêntico ao dos casos da cláusula match. Devido ao fato de que a captura de exceções é feita em ordem, se a exceção mais genérica, Throwable, for escrita no início, todas as outras exceções subsequentes não serão capturadas, portanto, deve ser escrita no final.

Sentença finally

A sentença finally é usada para executar passos que precisam ser executados tanto em caso de tratamento normal quanto em caso de exceção, exemplo a seguir:

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")
      }
         case ex: FileNotFoundException => {
            println("Exceção de Arquivo Ausente")
         }
         case ex: IOException => {
            println("Exceção IO")
         }
      } finally {
         println("Saindo finalmente...")
      }
   }
}

Executar o código acima, o resultado de saída será:

$ scalac Test.scala 
$ scala Test
Exceção de Arquivo Ausente
Saindo finalmente...