Pregunta

¿Hay alguna situación en la que usarías una aserción en lugar de un manejo de excepciones dentro de las clases de dominio ...

¿Fue útil?

Solución

Utilice excepciones para la validación de parámetros y otras comprobaciones que verifiquen que los usuarios de sus clases las usen según lo previsto.

Use aserciones para verificaciones de coherencia internas, es decir, para indicar usted , no el usuario de su clase.

Por lo tanto, si los usuarios de su clase ven una falla en la afirmación, saben que es (probablemente) un error interno en su código, no en el uso de su código. Por otro lado, si obtienen la excepción de validación de parámetros, saben que es su culpa.

Otros consejos

Nunca. Las aserciones no son una forma válida de manejo de errores. Utilícelos para ayudar a identificar los errores del programa durante las pruebas.

Una afirmación refleja un estado que nunca debería ocurrir y que no se esperaba, donde la aplicación no puede continuar 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 que podría ser posible recuperar.

Como ejemplo, si asigno espacio en el montón y esta asignación falla, entonces no puedo continuar trabajando, por lo que afirmo que la dirección devuelta es válida; donde no es válido, la aserción falla y el programa falla con ella.

Por otro lado, si abro un archivo para leerlo y no existe, entonces es posible recuperarse de la situación, en cuyo caso se lanza una excepción (y se captura, y se maneja hasta donde posible).

En general, las afirmaciones 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 aserciones deben estar deshabilitadas en el código de producción (para proteger a los usuarios de bloqueos aparentes), mientras que he leído una escuela de pensamiento que argumenta que esto es contraproducente, y que el usuario debería ver el fallo de la aserción, para que puede informar correctamente el problema.

Personalmente, a veces combino las dos técnicas; por lo general, si estoy detectando una excepción que no creo que pueda ser lanzada. Tomando el ejemplo anterior, si verifico la existencia del archivo antes de intentar abrirlo, entonces no espero que se lance una excepción, y si es así, tiendo a lidiar con esto al hacer una afirmación en el bloque catch relevante. Considero que esta es una técnica particularmente útil en Java, donde tales excepciones se verifican completamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top