Bucles
for y while .IRL incluye declaraciones para hacer bucles en la parte de acción de las reglas técnicas.
Bucle for
La sentencia for proporciona una forma compacta de iterar sobre un rango de valores.
La forma general de la sentencia for se puede expresar de este modo:
then{
for (initialization; test; increment) {
statements
}
}La expresión initialization se utiliza para inicializar el bucle. Se ejecuta una vez al principio del bucle. La expresión test determina cuándo terminar el bucle. Esta expresión se evalúa en la parte superior de cada iteración del bucle. Cuando la expresión se evalúa como false, el bucle termina. Finalmente, increment es una expresión que se invoca después de cada iteración a través del bucle. A continuación se muestra un ejemplo:
then {
int ?i = 1;
int ?j = 1;
for ( ?i = 1; ?i <= 3; ?i++ ) {
for ( ?j = 1; ?j <= 3; ?j++ ) {
System.out.println(" i =" + ?i + " j = " + ?j ) ;
}
}
}A menudo, los bucles for se utilizan para iterar sobre los elementos de una matriz o los caracteres de una serie. El ejemplo siguiente utiliza una sentencia for para iterar sobre los elementos de una matriz e imprimirlos:
then {
for (?i = 0; ?i < ?arrayOfInts.length; ?i++) {
System.out.println(?arrayOfInts[?i] + " ");
}
}Bucle while
Utilice una sentencia while para ejecutar continuamente un bloque de sentencias mientras una condición sigue siendo verdadera. La sintaxis general de la sentencia while es:
then {
while (test) {
statements
}
}En primer lugar, la sentencia while evalúa la expresión test , que debe devolver un valor booleano. Si test devuelve true, la sentencia while ejecuta las sentencias asociadas con ella. La sentencia while continúa probando la expresión test y ejecutando su bloque hasta que test devuelve false. A continuación se muestra un ejemplo de un bucle while :
then {
int ?i = 0 ;
while ( ?i <= 3 ) {
System.out.println( ?i ) ;
?i++ ;
}
}El ejemplo siguiente utiliza una sentencia while en la parte de acción de la regla para iterar sobre una matriz de elementos en una variable denominada elements. La variable elements está enlazada a un atributo de una variable c, también denominada elements. La variable c se declara en la parte de la condición de la regla como una colección de ManagedObject( ).
rule foundManagedObject {
when {
?c: collect ManagedObject();
}
then {
Enumeration ?elements = ?c.elements();
while (?elements.hasMoreElements()) {
System.out.println(elements.nextElement());
}
}
}