Bitácora

Manejo de errores

30 de Septiembre, 2024

Tarea

  • Continuar realizando la entrega 2 del tp de objetos. Hacer diagrama de clases.
  • Realizar los tests del ejercicio de Rick y Morty.

Introducción

Construimos el código para el enunciado de Rick & Morty

Cuando ejecutamos un programa, pueden ocurrir problemas que hacen que éste no se comporte de la manera que esperábamos. En otras palabras, pueden ocurrir errores. ¿Qué deberíamos hacer ante un error?

Si ignoramos el error, se puede convertir en una bola de nieve y desencadenar en otros errores, que pueden ser peores emoji-fire. Por lo tanto, lo mejor que podemos hacer es fallar lo antes posible. Una forma de lograr esto es mediante el uso de excepciones.

Excepciones

Una excepción es una indicación de que algo salió mal en la ejecución de nuestro programa.

¿Y cómo las podemos utilizar en Wollok? Hay dos maneras de hacerlo:

  • Usando el mensaje error, el cual entienden los objetos y nos sirve para lanzar una excepción:
self.error("mensaje del error")
  • Usando throw y la clase Exception:
 throw new Exception(message = "mensaje del error")

También podemos crear nuestras propias excepciones emoji-wink. Para esto podemos crear una clase que herede de Exception. Esto nos va a ser útil más adelante.:

class ExcepcionParticularDelPrograma inherits Exception {}

y la lanzamos como antes:

throw new ExcepcionParticularDelPrograma(message = "mensaje del error")

Además, es importante que nuestros mensajes de excepción sean expresivos. Así si algo rompe emoji-boom sabremos por qué emoji-grinning.

Ahora, todo bien, pero ¿para qué me sirven en la ejecución del programa? ¿Qué hacen?

class Summer inherits Beth{
  override method irseDeViaje(unRick) {
    if (self.esLunes()) {
      super(unRick)
    } else {
      throw new NoPuedoIrmeDeViajeException(message = "¡Sólo puedo irme de aventura los lunes!")
    }
  }


}

Luego de tirar la excepción se corta la ejecución del programa, por lo que si había código después, no será ejecutado. Además, decimos que las excepciones burbujean por lo que si otro objeto manda un mensaje y ese método lanza la excepción, también cortará el flujo de ejecución para ese objeto.

Entonces, ¿si lanzamos una excepción esta subirá indefinidamente? Bueno, en realidad no, porque si esto pasara cada vez que se lanza una excepción terminaría nuestro programa. Así que ahora veremos una forma de manejar excepciones…

Atrapando Excepciones

Cuando sabemos qué hacer ante una excepción, tenemos la opción de atrapar la excepción y utilizar otro código que se tiene que ejecutar si ocurrió tal excepción. emoji-confetti_ball
En Wollok, esto se realiza de la siguiente forma:

try {
	// código que puede fallar
} catch e : ExcepcionQueQuieroAtrapar {
	// código a ejecutar si ocurre ExcepcionQueQuieroAtrapar
}

Algo a notar, es que la excepción a atrapar tiene que ser la que quiero atrapar y lo menos general posible. Si atrapo, por ejemplo, Exception, seguramente esté atrapando errores que no hubiese querido atrapar como errores de que no se entiende el mensaje o la división por cero). Por este motivo cobra relevancia crear nuestras propias excepciones.


Podes ver nuestro github acá.

Y saber mas sobre nosotros acá