Schleifen

Sie können Schleifen in Aktionen hinzufügen, um die Ausführung von Aktionsanweisungen zu wiederholen. Sie steuern die Wiederholungen mithilfe von for -und while -Anweisungen.

IRL enthält Anweisungen für die Erstellung von Schleifen im Aktionsteil technischer Regeln.

For-Schleife

Die Anweisung for ist eine kompakte Methode für das Iterieren über einen Bereich von Werten.

Das allgemeine Format der Anweisung for kann wie folgt ausgedrückt werden:

then{
   for (initialization; test; increment) {
       statements
   }
}

Der Ausdruck initialization wird verwendet, um die Schleife zu initialisieren. Er wird einmal am Anfang der Schleife ausgeführt. Der Ausdruck test bestimmt, wann die Schleife beendet wird. Dieser Ausdruck wird am Anfang jeder Iteration der Schleife ausgewertet. Wenn der Ausdruck mit false ausgewertet wird, wird die Schleife beendet. increment ist ein Ausdruck, der nach jeder Iteration durch die Schleife aufgerufen wird. Beispiel:

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 ) ; 
      }
   }
}

Häufig werden for -Schleifen verwendet, um über die Elemente in einem Array oder die Zeichen in einer Zeichenfolge zu iterieren. Im folgenden Beispiel wird eine Anweisung for verwendet, um über die Elemente eines Arrays zu iterieren und sie auszugeben:

then {
   for (?i = 0; ?i < ?arrayOfInts.length; ?i++) {
      System.out.println(?arrayOfInts[?i] + " ");
   }
}

While-Schleife

Sie verwenden eine while-Anweisung, um einen Block von Anweisungen kontinuierlich auszuführen, während eine Bedingung erfüllt bleibt. Die allgemeine Syntax der Anweisung while ist wie folgt:

then {
   while (test) {
       statements
   }
}

Zuerst wertet die Anweisung while den Ausdruck test aus, der einen booleschen Wert zurückgeben muss. Wenn test truezurückgibt, führt die Anweisung while die zugehörigen Anweisungen aus. Die Anweisung while fährt mit dem Testen des Ausdrucks test und der Ausführung seines Blocks fort, bis test den Wert false zurückgibt. Im Folgenden sehen Sie ein Beispiel für eine while-Schleife:

then {
   int ?i = 0 ;
     while ( ?i <= 3 ) {
        System.out.println( ?i ) ;
        ?i++ ;
     }
}

Im folgenden Beispiel wird eine Anweisung while im Aktionsteil der Regel verwendet, um über einen Array von Elementen in einer Variablen mit dem Namen elements zu iterieren. Die Variable elements ist an ein Attribut einer Variablen c, auch elements genannt, gebunden. Die Variable c ist im Bedingungsteil der Regel als Objektgruppe von ManagedObject() deklariert.

rule foundManagedObject {
  when {
    ?c: collect ManagedObject();
  }
  then {
    Enumeration ?elements = ?c.elements();
    while (?elements.hasMoreElements()) {
     System.out.println(elements.nextElement());
    }
  }
}