Aserciones

Una aserción es una comprobación que se hace en un punto del programa para verificar que realmente estamos utilizando los datos correctos. La sintaxis para incluir una aserción es cualquiera de las siguientes:

assert <expresion_booleana> ;
assert < expresion_booleana > : <mensaje_error> ;

Si la expresión booleana se evalúa a false, entonces se lanza un AssertionError. Como vimos anteriormente los errores no se pueden capturar y el programa finaliza. Veamos un ejemplo: Estamos ejecutando un código y llegados a este punto pensamos que x siempre toma un valor mayor o igual a 0. Por lo cual si la condición devuelve false pensamos que x vale 0.

Ejemplo sin aserciones:

Pues bien, el uso de las aserciones nos permite verificar esta suposición. Si x vale 0, la expresión de la aserción se evaluará como true y el programa continuará según lo previsto. Pero si x toma un valor negativo entonces la expresión devolverá false y se generará un AssertionError haciendo que el programa se detenga. Esto es lo que realmente queremos, que el programa lance el error para poder depurarlo. Veamos el ejemplo anterior mejorado.

La ventaja de utilizar aserciones es evitar el uso de condicionales innecesarios que una vez depurado todo el código podremos desactivar y no llevarlas a producción.

Veamos un ejemplo funcional:

 

BUENAS PRÁCTICAS CON ASERCIONES

Debemos saber exactamente qué consecuencias tenemos al desactivar las aserciones. No podemos comprobar mediante aserciones aquellos procesos necesarios en producción. Se pueden utilizar aserciones para:

      •  Controlar los invariantes del control de flujo
      • Post condiciones e invariantes de la clase
      • Invariantes internas

No se deberían utilizar aserciones en los siguientes casos:

      • Para chequear los parámetros de un método público.
      • No usar métodos en la aserción que puedan causar efectos secundarios, como por ejemplo modificar el valor de una variable.

HABILITAR Y DESHABILITAR ASERCIONES

Por defecto, las aserciones están deshabilitadas. Para habilitarlas recurrimos a las siguientes opciones:

java -ebableassertions MyProgram

o tambien podemos usar:

java -ea My Program