choose

Permet de choisir une valeur basée sur une condition satisfaite.

L'expression choose contient :

Les conditions sont évaluées dans l'ordre descendant des expressions when. Le traitement s'arrête à la première condition pour effectuer le test. Les conditions suivantes ne sont pas évaluées.

L'expression choose correspond aux expressions if / else if /.../ else typiques de la plupart des langages de programmation. Il peut être utilisé efficacement pour implémenter une table de décision.

Vous pouvez envisager de commander vos conditions afin que les personnes les plus susceptibles de réussir se trouvent à proximité du haut de la liste (pour éviter tout calcul inutile).

avertissement : Pour les conditions simples (par ex, celles qui testent l'égalité par rapport à une valeur unique), vous pouvez généralement réorganiser vos conditions sans affecter le comportement du jeu de règles.

Toutefois, pour les conditions plus complexes (et, par conséquent, en général), vous devez déterminer attentivement si la réorganisation de vos conditions introduira des changements de comportement non souhaités.

<?xml version="1.0" encoding="UTF-8"?>
<RuleSet name="Example_choose"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation=
"http://www.curamsoftware.com/CreoleRulesSchema.xsd">
  <Class name="Person">

    <Attribute name="age">
      <type>
        <javaclass name="Number"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <Attribute name="ageCategory">
      <type>
        <javaclass name="String"/>
      </type>
      <derivation>
        <choose>
          <!-- Il n'existe pas de clause <test> explicite. Cette
               instruction <choose> teste chaque condition pour
               vérifier si elles possèdent la valeur TRUE. -->
          <type>
            <javaclass name="String"/>
          </type>

          <!-- Notez que l'ordre de ces conditions est
               important ; si nous devons permuter les positions des
               tests "Newborn" et "Infant", tous les enfants de
               moins de 5 ans (y compris ceux de moins de 1 an) seront
               identifiés comme enfants (Infant) ; aucun enfant ne sera
               identifié comme nourrisson (Newborn).  -->
          <when>
            <condition>
              <compare comparison="&lt;">
                <reference attribute="age"/>
                <Number value="1"/>
              </compare>
            </condition>
            <value>
              <String value="Newborn"/>
            </value>
          </when>
          <when>
            <condition>
              <compare comparison="&lt;">
                <reference attribute="age"/>
                <Number value="5"/>
              </compare>
            </condition>
            <value>
              <String value="Infant"/>
            </value>
          </when>
          <when>
            <condition>
              <compare comparison="&lt;">
                <reference attribute="age"/>
                <Number value="18"/>
              </compare>
            </condition>
            <value>
              <String value="Child"/>
            </value>
          </when>
          <otherwise>
            <value>
              <String value="Adult"/>
            </value>
          </otherwise>
        </choose>
      </derivation>
    </Attribute>

    <Attribute name="numberOfSpouses">
      <type>
        <javaclass name="Number"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <Attribute name="maritalStatus">
      <type>
        <javaclass name="String"/>
      </type>
      <derivation>
        <choose>
          <type>
            <javaclass name="String"/>
          </type>
          <!-- Test du nombre d'épouses -->
          <test>
            <reference attribute="numberOfSpouses"/>
          </test>
          <!-- Notez que l'ordre des tests "0" et "1" n'a pas
 d'importance.
               Par conséquent, vous voudrez peut-être les organiser selon
 que la plupart des
               instances Person testées ont 0 ou 1 épouse.
      -->
          <when>
            <condition>
              <Number value="0"/>
            </condition>
            <value>
              <String value="Unmarried"/>
            </value>
          </when>
          <when>
            <condition>
              <Number value="1"/>
            </condition>
            <value>
              <String value="Married - single spouse"/>
            </value>
          </when>
          <otherwise>
            <value>
              <String value="Married - multiple spouses"/>
            </value>
          </otherwise>
        </choose>

      </derivation>
    </Attribute>

  </Class>

</RuleSet>