exception - salida - tipos de excepciones en java
Cuándo usar la aserción sobre las excepciones en las clases de dominio (3)
Nunca. Las afirmaciones no son una forma válida de manejo de errores. Úselos para ayudar a identificar los errores del programa durante la prueba.
¿Hay alguna situación en la que usaría aserciones en lugar de manejo de excepciones dentro de las clases de dominio ...?
Una aserción refleja un estado que no debería ocurrir nunca y que no se esperaba, donde la aplicación no puede seguir ejecutándose por una razón u otra, mientras que una excepción indica un estado que no se considera "normal", pero que no fue inesperado, y de la cual podría ser posible recuperarlo
Como ejemplo, si asigno espacio en el montón y esta asignación falla, entonces no puedo seguir trabajando, por lo que afirmo que la dirección devuelta es válida; donde no es válido, la afirmación falla y el programa falla con ella.
Por otro lado, si abro un archivo para leer y no existe, entonces es posible que se recupere de la situación, en cuyo caso se lanza una excepción (y se captura, y se maneja lo más posible).
En general, las aserciones son más útiles durante la fase de depuración, mientras que las excepciones se consideran parte del flujo regular del programa y el manejo de errores. El consenso general es que las afirmaciones deben deshabilitarse en el código de producción (para proteger a los usuarios de aparentes fallas), mientras que he leído una escuela de pensamiento que argumenta que esto es contraproducente, y que el usuario debería ver la falla de afirmación, de modo que puede reportar el problema correctamente
Personalmente, a veces combino las dos técnicas; por lo general, si estoy atrapando una excepción que no creo que pueda ser arrojada. Tomando el ejemplo anterior, si verifico la existencia del archivo antes de intentar abrirlo, entonces no espero lanzar una excepción, y si es así, entonces trato de lidiar con esto levantando una afirmación en el bloque catch relevante. Encuentro esto una técnica particularmente útil en Java, donde tales excepciones están totalmente controladas.
Use excepciones para la validación de parámetros y otras comprobaciones que verifiquen que los usuarios de sus clases las utilicen como se esperaba.
Use afirmaciones para verificaciones de consistencia interna, es decir, para indicar que se equivocó, no el usuario de su clase.
Por lo tanto, si los usuarios de su clase ven una falla de aserción, saben que es (probablemente) un error interno en su código, no en el uso de su código. Por otro lado, si la excepción de validación del parámetro get, ellos saben que es su culpa.