Elige un valor basándose en una condición que se cumple.
La expresión choose contiene:
un especificador de tipo de datos (consulte Tipos de datos soportados) que declara el tipo de valor que se elegirá;
una expresión que especifica el valor que se debe probar para la condición en cada expresión when a su vez. Si no se especifica ninguna expresión test, la condición en cada expresión when se prueba a su vez para comprobar si devuelve el valor true;
cada uno contiene una condición que se debe probar y un valor que se debe devolver si la condición pasa y
una expresión que contiene un valor que se debe devolver (de modo que independientemente de cualquier cosa, se elige siempre un valor).
Las condiciones se evalúan en orden descendente de las expresiones when, deteniéndose en la primera condición para pasar la prueba. Las condiciones subsiguientes no se evalúan.
La expresión choose refleja las sentencias if / else if /.../ else típicas de la mayoría de los lenguajes de programación. Se puede utilizar de forma efectiva para implementar una tabla de decisiones.
Puede tener en cuenta la posibilidad de ordenar las condiciones de manera que las que tienen más probabilidades de ser satisfactorias estén cerca de la parte superior de la lista (para evitar cálculos innecesarios).
Sin embargo, para condiciones más complejas (y, por tanto, en general), debe considerar detenidamente si la reordenación de las condiciones introducirá cambios de comportamiento no deseados.
<?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> <!-- No hay ninguna <test> explícita, por lo tanto esta sentencia <choose> probará cada condición para ver si es verdadera (TRUE). --> <type> <javaclass name="String"/> </type> <!-- Tenga en cuenta que el orden de estas condiciones es importante; si tuviéramos que intercambiar las posiciones de las pruebas "Newborn" e "Infant", todos los niños de menos de 5 años (incluidos los que tienen menos de 1) se identificarán como bebés (Infants); ningún niño se identificará como recién nacido (Newborns). --> <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> <!-- Probar el número de cónyuges --> <test> <reference attribute="numberOfSpouses"/> </test> <!-- Tenga en cuenta que el orden de las pruebas "0" y "1" no importa - por lo tanto es aconsejable que los ordene en función de si la mayoría de instancias de persona que se están probando tiene 0 o 1 cónyuges. --> <when> <condition> <Number value="0"/> </condition> <value> <String value="Unmarried"/> </value> </when> <when> <condition> <Number value="1"/> </condition> <value> <String value="Casado/a - cónyuge único"/> </value> </when> <otherwise> <value> <String value="Casado/a - varios cónyuges"/> </value> </otherwise> </choose> </derivation> </Attribute> </Class> </RuleSet>