#Kata Try-Catch-Finally en Scala.

En este post te voy a explicar como funciona el manejo de errores mediante try-catch-finally en Scala.

Antes de empezar.

El estándar en la industria para el manejo de errores es la Exception, no siempre es así, hay variaciones u otros enfoques para resolver el problema. En el caso de Scala, el lenguaje soporta el manejo de Excepciones como sistema  de manejo de errores, aunque este patrón no es el único que puedes encontrar.

Try-Catch-Finally.

Un bloque try ejecuta 1 o más instrucciones de código. En el caso de que se arroje una Excepción, y está entre en el patrón de casos reconocidos de bloque catch, esta se contiene, de otro modo el error recorre las capas superiores hasta que llega a algún bloque catch que puede manejar el fallo o rompe el programa.

El bloque finally se ejecutará siempre, no importando si el bloque try arrojo un error o no. Por lo general, usas este bloque para disponer de recursos costosos como accesos a datos, archivos o conexiones externas. Cualquier instrucción en bloque finally puede generar excepciones adicionales, estas nos eran manejadas por el bloque catch anterior.

Pattern Matching.

Scala hace empleo del pattern matching en el bloque catch. Necesitas especificar al menos una instrucción «case», puedes hacer match por tipo o agregar alguna condicional extra.

import java.io.IOException
//Custom exception example
case class CustomException(errorCode:Int) extends Exception {
}
def handleExceptions(action: ()=> Unit): Unit = {
try {
action()
} catch {
// Catching your custom errors
case _: CustomException => println("Custom exception matched")
// Using conditionals in the pattern
case c: CustomException if c.errorCode == 999 => println("Custom Error Code matched")
// Catching a concrete type of Exception
case _: IOException => println("Known exception matched...")
// Default cases
case _: Exception => println("Default case matched")
} finally {
println("Executing finally block...")
}
}
handleExceptions(()=> throw CustomException(-1))
handleExceptions(()=> throw CustomException(999))
handleExceptions(()=> throw new IOException())
handleExceptions(()=> throw new InstantiationException())
handleExceptions(()=> { println("Doing nothing...")})

Gustavo Sánchez

Soy especialista en escribir software de calidad. Mediante el uso de marcos de trabajo, técnicas y automatización de procesos he podido reducir los costes operativos de los sistemas de la empresa. Sistemas confiables y adaptables producen clientes felices.

Site Footer