Asserts en Java
En los lenguajes orientados a objeto, la gestión de los errores se realiza a
través de excepciones.
Existen dos familias de expciones:
- Lo errores: Problemas graves que se pueden dar y que no merece la pena
controlar (falta de memoria, error de comunicaciones, etc) - Las excepciones en si mismas que son predecibles y que de un modo
razonable podemos (y debemos controlar).
Java esta en continua evolución y a partir de la versión 1.4 se ha
introducido el concepto de asserts.
Un assert es una condición que se debe dar en un programa para que no se
produczca un error.
La gracia que tiene es que son una mezcla de los dos tipos vistos
anteriormente: Pueden suspender la ejecución de un programa pero no estamos
obligados a controlarlar (declararlas y capturar su posible ejecución).
Además, en tiempo de ejecución podemos definir si queremos evaluarlas o
no….
Vamos a introducirlas en un programa y verificar su uso.
Creamos una clase normal
class misassert { public static void main(String [] main) { int i = 10; assert i> 100; System.out.println(«Este es mi ejemplo»); |
Si compilamos, nos da un error:
Para pocer compilar necesitamos especificar que trabajamos con la versión
1.4
javac -source 1.4 *.java
Ejecución
Si ahora ejecutamos nuestra clase, veremos que no tiene en cuanta el assert
Para que lo considere hay que utilizar un parámetro nuevo: -ea
Mensajes adicionales
Podemos pones un mensaje:
assert i> 100 : La variable i esta fuera de
rango ;
C:\java>java -ea misassert Exception in thread «main» java.lang.AssertionError: La variable i esta fuera de rango at misassert.main(misassert.java:7) C:\java> |
En mensaje es una expresión por lo que podría llamarse a una función… en
nuestro caso podría mostrar los mensajes en función del idioma seleccionado
|
Si ahora decompilamos el código vamos que el compilador ha echo cosas por
nosotros…. y nuestro código es más pesado
|
Podemos utilizar en nuestro programa la misma sintaxis directamente::
throw new
AssertionError(mensajeError());
Los asserts son una buena técnica para programas pre y post condiciones….
la programación por contrato….