Permet de choisir une valeur basée sur une condition satisfaite.
L'expression choose contient :
spécificateur du type de données (voir Types de données pris en charge) indiquant le type de valeur qui sera choisi ;
expression qui indique la valeur à tester par rapport à la condition dans chaque expression when à son tour. Si aucune expression test n'est spécifiée, l'élément condition de chaque expression when est testé à son tour pour vérifier s'il renvoie la valeur true ;
chacun contient un élément condition à tester et une élément value à renvoyer si la condition est satisfaite ; et
expression contenant un élément value à renvoyer (de sorte qu'une valeur soit toujours sélectionnée).
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).
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="<"> <reference attribute="age"/> <Number value="1"/> </compare> </condition> <value> <String value="Newborn"/> </value> </when> <when> <condition> <compare comparison="<"> <reference attribute="age"/> <Number value="5"/> </compare> </condition> <value> <String value="Infant"/> </value> </when> <when> <condition> <compare comparison="<"> <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>