Consejos sobre el manejo de excepciones


En lenguajes de programación orientados a objetos (O-O) existe un mecanismo que permite que las aplicaciones manejen situaciones no esperadas de una forma apropiada; esto significa que la aplicación puede intentar recuperar el estado que tenía antes de darse dicha excepción en el mejor de los casos; en el peor, si la recuperación no es posible, abortar la operación o liberar recursos y cerrar la aplicación de forma ordenada. El manejo de excepciones constituye, pues, una potente herramienta para lograr robustez y estabilidad en nuestros programas.
Jeffrey Richter, en el libro que abajo menciono, incluye un completo capítulo sobre Excepciones y su tratamiento, incluyendo una serie de interesantes consejos que, de tenerlos en cuenta, nos permitirán un uso inteligente y apropiado de las excepciones, sacando el máximo partido de las mismas.
En primer lugar, una excepción no sirve solamente para manejar errores y/o situaciones inesperadas. Una excepción debe ser lanzada cuando se detecta una situación en la cual un método no puede realizar su función adecuadamente. Es decir, es una buena idea utilizar excepciones como sustitutas de aquello de retornar códigos de error, mucho menos mantenibles y entendibles por quien lee el código. Si la operación terminó es que fue bien; si no, se lanza una excepción con un mensaje adecuado que el receptor debe saber tratar.
Valida los argumentos de tus métodos; utiliza el manejo de excepciones para implementar programación bajo contrato: si no se cumplen las precondiciones del método, lanza una excepción. De este modo es más probable que el método termine correctamente, una vez satisfechas las precondiciones. Puedes utilizar una ArgumentException o cualquier tipo hijo de éste, o crear tu propia excepción como se indicó más arriba.
No captures todo siempre: un método debe capturar aquellas excepciones para las cuales esté preparado, no “tragarse” todo. Las excepciones deben tratarse en el nivel adecuado. Es decir: evita a toda costa utilizar bloques catch vacíos. Si el nivel actual no está preparado para manejar la excepción, relánzala con throw.
A tenor de lo indicado antes, intenta ser específico al capturar excepciones, distingue entre los tipos de excepciones que te puedan llegar y trátalos en consecuencia de forma específica, en distintos bloques catch.
Espero que hayáis encontrado útiles estos consejos. Os recomiendo el libro del que he extraido estas notas; tiene algunos capítulos realmente interesantes, como el mencionado de las excepciones y el del recolector de basura, del que es posible que dedique algunas líneas aquí próximamente. Además trata aspectos del CLR de .NET en profundidad, explicando cómo funcionan las cosas desde el núcleo del framework.

2 comentarios:

  1. Hola! Muchas gracias por difundir mi artículo en vuestro blog, gracias por considerarlo interesante, espero que os guste alguno más.

    Un saludo.

    ResponderEliminar