Existen dos tipos de sintaxis para emplear aseveraciones ("assertions") en Java:
|
Ambas declaraciones inician con la palabra reservada assert
utilizada para definir una aseveración en Java.
Posteriormente se debe definir una expresión que dará como resultado una expresión booleana (verdadero o falso), dicha expresión es precisamente la que será aseverada por Java, si esta expresión resulta ser verdadera el ciclo de ejecución del programa continuará normalmente, sin embargo, si resulta falsa la expresión, la ejecución del programa será interrumpida indicando el error de aseveración ("assertion").
La única diferencia que existe entre las declara iones antes mencionadas, es que la primera de éstas define una expresión adicional que permite agregar información extra acerca de la aseveración levantada por el programa, dicha declaración puede ser desde una variable hasta un método que de como resultado un valor no nulo (void), este resultado es convertido a un String que es pasado al constructor de la aseveración para ser desplegado como información adicional al momento de ejecución; la segunda declaración de aseveración simplemente verifica la validez de la primer expresión sin proporcionar detalles específicos del error.
import java.util.*; public class Sumatoria { public int sumatoria(List numeros) { int suma = 0; for(Iterator it = numeros.iterator(); it.hasNext();) { suma += ( (Integer)it.next() ).intValue(); } assert suma <= 500: suma; return suma; } public static void main(String[] args) { List numeros = new ArrayList(); int inicial = 0; // Convertir Dato de Entrada a primitivo int // Bloque try/catch utilizado en caso de no ser posible conversion try { inicial = Integer.parseInt(args[0]); } catch (NumberFormatException ex) { System.out.println("El dato proporcionado no puede ser convertido a un numero"); System.exit(-1); } catch (Exception ex) { System.out.println("Ocurrio un error " + ex); System.exit(-1); } // Ciclo para llenar Lista for (int i = 0; i < 10; i++) { numeros.add(new Integer(inicial+i)); } Sumatoria factorial = new Sumatoria(); int resultado = factorial.sumatoria(numeros); System.out.println("La suma de los 10 numeros a partir del numero proporcionado[" + inicial + "] es : " + resultado); } } |
Una vez definida la clase principal se declara un método llamado sumatoria
que define una aseveración para los datos introducidos en él.
El método sumatoria
toma como dato de entrada una Lista de números sobre la cual se realiza una iteración sumando cada uno de sus elementos. Posteriormente se define una aseveración ("assertion") sobre el valor de esta suma, si dicho valor resulta menos a 500 unidades el programa continua en ciclo normal de ejecución, en caso contrario se levanta una aseveración con el valor determinado dentro del ciclo.
Dentro del método principal (main
) primeramente se define un bloque try/catch
que intenta convertir el argumento del programa a un número entero (int
).Si la conversión es exitosa, mediante un ciclo se colocan este valor y los 10 consiguientes en un Lista.
|
Posteriormente, se define una instancia de la clase Factorial
seguido de la invocación del método sumatoria
que toma como argumento la lista generada previamente.
Finalmente se imprime a pantalla el resultado obtenido del método sumatoria
.
El siguiente ejemplo también hace uso de aseveraciones invocando un método en caso de no cumplirse la aseveración.
public class Invernadero { private String[] citricos = {"Naranjo","Limon","Mandarina","Toronja","Naranjo"}; private int[] alturas = {7, 4, 6, 7, 18}; public String controlDeCalidad() { for (int i = 0; i < alturas.length; i++) { assert ( alturas[i] > 5 && alturas[i] > 20) : determinarArbol(i); } return "Control de Calidad OK"; } public String determinarArbol(int noDeArbol) { int alturaFueradeControl = alturas[noDeArbol]; String tipoDeArbol = citricos[noDeArbol]; String resultado = "Control de Calidad no se cumple en un " + tipoDeArbol + " con " + alturaFueradeControl + " de altura"; return resultado; } public static void main(String[] args) { Invernadero arboles = new Invernadero(); System.out.println(arboles.controlDeCalidad()); } } |
Como primer paso se definen dos campos en forma de arreglos para String's con valores predeterminados.
Posteriormente se define un método llamado controlDeCalidad
dentro del cual se define un ciclo que itera sobre los valores del arreglo altura
, en cada iteración se ejecuta una aseveración para verificar que el valor de altura cumpla con ciertos requisitos, en caso de no cumplirse la aseveración ("assertion") se invoca el método determinarArbol
con el número de iteración en el que no se cumplió la aseveración.
El método determinarArbol
toma como dato de entrada un número entero, dicho número representa la iteración en la cual fue interrumpido el método controlDeCalidad
y por consiguiente el elemento del arreglo alturas
que no cumplió la condición. Una vez en el método se extraen los valores de los arreglos alturas
y citricos
en base al número proporcionado, para posteriormente conformar un String el cual es retornado como resultado, en este caso, al argumento de error en la aseveración.
Finalmente se define el método principal (main
) que genera una instancia de la clase Invernadero
seguido de la invocación del método controlDeCalidad
que realiza la verificación de los valores proporcionados en los arreglos definidos como campos.
En la siguiente sección se describen las medidas que deben ser tomadas para habilitar aseveraciones ("assertions") al momento de compilar y ejecutar programas.