A menudo, cuando escribo una función, quiero asegurarme de que las entradas sean válidas para detectar dichos errores lo antes posible (creo que se denominan condiciones previas). Cuando falla una condición previa, siempre he lanzado una excepción. Pero estoy empezando a dudar si esta es la mejor práctica y si no, las afirmaciones serían más apropiadas.
Entonces, ¿cuándo debo hacer qué? ¿Cuándo es apropiado usar una aserción y cuándo es apropiado lanzar una excepción?
exceptions
assertions
gablin
fuente
fuente
Respuestas:
Las afirmaciones solo deben usarse para verificar condiciones que lógicamente deberían ser imposibles de ser falsas (léase: controles de cordura). Estas condiciones solo deben basarse en las entradas generadas por su propio código. Cualquier verificación basada en entradas externas debe usar excepciones.
Una regla simple que tiendo a seguir es verificar los argumentos de las funciones privadas con afirmaciones, y usar excepciones para los argumentos de funciones públicas / protegidas.
fuente
Las aserciones se utilizan para encontrar errores de programación. Sus programas deben funcionar igual de bien cuando se eliminan todas las aserciones.
Las excepciones, por otro lado, son para situaciones que pueden ocurrir incluso cuando el programa es perfecto; son causados por influencias externas, como hardware, red, usuarios, etc.
fuente
La práctica de programación típica es compilar aserciones de compilaciones de producción / lanzamiento. Las afirmaciones ayudarán solo durante las pruebas internas para detectar el fracaso de los supuestos. No debe asumir el comportamiento de agencias externas, por lo que no debe hacer valer los eventos de la red o del usuario. También es una buena práctica escribir código de manejo para compilaciones de producción en caso de que falle una aserción.
Por ejemplo en C,
Las excepciones están destinadas a integrarse en las compilaciones de producción. La alternativa para la excepción es devolver un error y no afirmaciones.
fuente
Un problema con afirmaciones para mí es que están deshabilitadas por defecto en Java.
Usamos una estrategia de falla en la que el programa, que puede haber estado funcionando sin supervisión durante años, debe bloquearse lo antes posible para evitar la corrupción de datos en caso de datos incorrectos (en un formulario inesperado). Esto es para lo que usamos la verificación, y al usar afirmaciones básicamente nos arriesgamos a que no estén activos.
fuente