Manejo de excepciones con Try Catch Finally en Kotlin

Clase 19 de 35Curso de Kotlin

Resumen

Saber manejar excepciones en Kotlin puede marcar una gran diferencia en el desarrollo de software, pues permite prevenir interrupciones inesperadas durante la ejecución del programa. Las excepciones, como las generadas al intentar acceder a posiciones inexistentes en arrays, pueden gestionarse mediante las cláusulas try, catch y finally, garantizando una ejecución más robusta y controlada en tus aplicaciones.

¿Qué son las excepciones y por qué suceden?

Las excepciones son situaciones especiales en el código que provocan la interrupción de su flujo normal. Por ejemplo:

  • Index out of bounds exception: aparece al intentar acceder a un índice inexistente de un arreglo o lista.
  • NullPointerException: sucede al intentar manipular objetos que tienen un valor nulo.

Estas situaciones, si no se controlan adecuadamente, provocan que el programa termine abruptamente.

¿Cómo usar Try Catch Finally para manejar excepciones en Kotlin?

Al utilizar estas instrucciones, puedes anticiparte a posibles errores, asegurando que tu aplicación siga funcionando aunque ocurran problemas específicos.

  • Try: envuelve el código que podría lanzar una excepción.
  • Catch: captura y maneja la excepción acorde a su tipo.
  • Finally: se ejecuta independientemente de si hay excepciones o no.

Ejemplo práctico:

try {
   println(emails[10])
} catch (e: ArrayIndexOutOfBoundsException) {
   println("índice de emails no válido")
} finally {
   println("finalizó el procesamiento de correos")
}

En este caso, si existe un error al acceder a un índice inexistente, se muestra un mensaje específico sin interrumpir el flujo general del programa.

¿Cómo puedes generar y manejar excepciones personalizadas?

También puedes lanzar o capturar excepciones específicas o incluso crear las propias heredando funcionalidades de clases existentes. Así, generas excepciones totalmente personalizadas para casos específicos en tu código.

class EmailInvalidException(message: String) : Exception(message)

for (email in emails) {
   if (!email.contains("@")) throw EmailInvalidException("Email inválido no tiene arroba: $email")
}

Esto facilita que tu código sea claro y preciso en el manejo de errores particulares.

¿Cómo puedes aplicar estos conceptos en ejercicios prácticos?

Para consolidar este conocimiento, puedes crear funciones que identifiquen y manejen divisiones por cero, generando la excepción ArithmeticException, controlándola con catch, y devolviendo valores específicos o nulos cuando sea necesario:

fun dividir(a: Int, b: Int): Int? {
  return try {
    a / b
  } catch (e: ArithmeticException) {
    null
  }
}

println(dividir(10, 2)) // Devuelve 5
println(dividir(10, 0)) // Devuelve null

Esta estrategia permite gestionar situaciones especiales eficientemente y mejora notablemente la estabilidad de tu aplicación.

Anímate a experimentar y comparte tus dudas o experiencias acerca del manejo de excepciones en Kotlin en los comentarios.