Die While-Schleife

Die Schleife "while" wird verwendet, wenn die Anzahl der erforderlichen Schleifeniterationen unbekannt ist. Die Anzahl der Schleifeniterationen wird von der Antwort des Benutzers auf die Frage in jeder Iteration der Schleife bestimmt. Sie möchten beispielsweise den Benutzer bitten, einige Angaben zum Einkommen einzugeben, und gleichzeitig fragen, ob der Benutzer weitere Einkommensquellen eingeben möchte. Dies können Sie mit der folgenden Schleife tun:

Abbildung 1. While-Schleife
<loop loop-type="while" loop-expression="hasMoreIncome" 
entity="Income">
  <question-page id="IncomePage">
    <cluster>
      <question id="type">
        <label id="Type.Label">
          <![CDATA[Type:]]>
        </label>
      </question>
      <question id="amount">
        <label id="Amount.Label">
          <![CDATA[Amount:]]>
        </label>
      </question>
      <question id="hasMoreIncome" 
              control-question="true" 
              control-question-type="IEG_BOOLEAN">
        <label id="ContinueQuestion.Label">
          <![CDATA[More income?]]>
        </label>
      </question>
    </cluster>
  </question-page>
</loop>

Die While-Schleife führt immer mindestens eine Iteration aus. (Dadurch ist sie aus der Sicht eines Programmierers eher eine Do-While-Schleife.) Wenn Sie prüfen möchten, ob ein Schleifendurchlauf stattfindet, sollte sie in eine Bedingung eingeschlossen werden.

Die While-Schleife hat dieselben Probleme wie die For-Schleife, wenn sie die Schleife durchläuft und bereits Informationen eingegeben wurden. Sie wird tatsächlich zu einer For-Each-Schleife, wenn der Benutzer alle zuvor eingegebenen Datensätze durchlaufen hat. Für die While-Schleife muss das Entitätsattribut (wie im Beispiel oben) festgelegt werden. Sie können auch ein Kriterium angeben.

Schleifen können in andere Schleifen verschachtelt sein. Die While-Schleife wird fast immer in einer For-Each-Schleife verschachtelt. Um das Beispiel oben zu erweitern, wurden, bis die Einkommens-Schleife im IEG-Script erreicht wird, mehrere Personen erfasst. Um mehrere Einkommen pro Person zu erfassen, sieht die verschachtelte Schleife wie folgt aus, vorausgesetzt, der Benutzer wurde bereits gefragt, welche Personen welches Einkommen beziehen:

Abbildung 2. Verschachtelte Schleife
<loop loop-type="for-each" entity="Person" 
criteria="hasIncome==true">
  <loop loop-type="while" loop-expression="hasMoreIncome" 
    entity="Income">
    <question-page id="IncomePage">
      ...
      <cluster>
        ...
        <question id="hasMoreIncome" 
                  control-question="true" 
                  control-question-type="IEG_BOOLEAN">
          <label id="ContinueQuestion.Label">
            <![CDATA[More income?]]>
          </label>
        </question>
      </cluster>
    </question-page>
  </loop>
</loop>

Bei der Verwendung von While-Schleifen wird empfohlen, dass der Schleifenausdruck ein einfacher Ausdruck sein sollte, der nur auf die ID der Frage verweist, die innerhalb der Schleife abgefragt wird, um zu bestimmen, ob weitere Datensätze hinzugefügt werden sollen. Diese Frage sollte eine Kontrollfrage mit dem Typ "Boolesch" sein.

Die Kontrollfrage wird automatisch aktualisiert, wenn ein Datensatz über die Zusammenfassungsseite hinzugefügt oder gelöscht wird. Wenn die Antworten geprüft werden, indem die Schleife nach dem ersten Durchlauf durchlaufen wird, ist die Frage schreibgeschützt, außer bei der letzten Iteration, damit weitere Entitäten hinzugefügt werden können.