Compartir a través de


Agregar dependencias a los datos de Configuration-Dependent

Las directivas *Switch/*Case hacen que los datos dependan de los parámetros definidos mediante las directivas *Feature/*Option . La etiqueta de construcción de *Switch denomina uno de los parámetros definidos en una construcción *Feature . La referencia de un parámetro mediante la etiqueta de construcción de la construcción *Switch podría preceder a su definición a través de la construcción *Feature .

El cuerpo de una construcción *Switch contiene una serie de construcciones *Case y una construcción opcional *Default . Ninguna otra entrada secundaria puede aparecer dentro de la construcción *Switch . La etiqueta de construcción de la construcción *Case asigna uno de los valores permitidos definidos en una construcción *Option que corresponde al parámetro denominado en la construcción *Switch . La etiqueta de construcción no se usa para la construcción*Default .

*Las construcciones switch pueden aparecer como entradas secundarias dentro de cualquier otra construcción, salvo que una construcción *Switch no puede ser el elemento secundario de otra construcción *Switch . El cuerpo de una construcción *Case puede contener cualquier entrada GDL, excepto que la construcción *Case no puede ser el antecesor de una construcción *Feature o *Default .

Las directivas *Switch/*Case funcionan de forma muy similar a las construcciones del lenguaje C del mismo nombre. El contenido de cualquier construcción *Case (cuya etiqueta de construcción se denomina en la configuración como el valor actual o el estado del parámetro denominado por la construcción *Switch ) pueden aparecer en la instantánea. De lo contrario, el analizador impide que las entradas contenidas en la construcción *Case aparezcan en la instantánea.

Nota A diferencia de la versión C de *Switch/*Case, GDL no necesita una instrucción break para impedir que la ejecución continúe más allá del final de la construcción *Case .

Si se omite el cuerpo de una construcción*Case (es decir, *Case aparece como un atributo en lugar de una construcción), se usará el cuerpo del siguiente *Caso o *Construcción predeterminada . Este comportamiento es similar al comportamiento en el caso del modificador/ del lenguajeC. Si la construcción *Default está presente, debe aparecer en último lugar, después de todas las entradas *Case .

Si el parámetro permite PICKMANY, el contenido de varias construcciones *Case puede aparecer en la instantánea. Esta situación podría dar lugar a varias definiciones de la misma construcción o atributo. Estas definiciones múltiples se controlan igual que si aparecen explícitamente en el archivo GDL fuera de cualquier construcción *Switch/*Case . Si varias construcciones *Case comparten el mismo cuerpo y más de una se denomina en la configuración, el contenido del cuerpo solo aparecerá una vez.

Si ninguna de las construcciones *Case se denomina en la configuración, se usa el contenido de la *construcción predeterminada . Si no se define ninguna construcción *Default , toda la construcción *Switch/*Case y todas sus entradas descendientes se excluyen de la instantánea.

Si se definen varias construcciones del mismo nivel *Switch/*Case , cada una se evalúa independientemente de la otra. La combinación de construcciones del mismo nivel no se aplica a las construcciones *Switch/*Case .

Las directivas *Switch y *Construct nunca aparecen en la instantánea, por lo que, en la instantánea, las entradas secundarias de la construcción *Caseaparecen como las entradas secundarias del elemento primario de la construcción *Switch .

En el ejemplo de código siguiente, se define un parámetro Today para que tarde días de la semana. En el ejemplo se muestran dos construcciones del mismo nivel *Switch/*Case ; ambas se evaluarán de forma independiente.

*Schedule:
{
  *Switch: Today
  {
    *Case: Saturday
    *Case: Sunday
    {
 *Eat: Breakfast, Dinner
    }
    *Case: Monday
    *Case: Wednesday
    *Case: Friday
    {
        *Eat: Lunch
    }
  }
  *Switch: Today
  {
    *Case: Sunday
    {
        *ToDo: Laundry
    }
    *Case: Saturday
    {
        *ToDo: Ballgame
    }
    *Default:
    {
        *ToDo: FixBugs
    }
    }
}

Si la configuración especifica Today: Saturday, la instantánea contendrá el código siguiente.

*Schedule:
{
 *Eat: Breakfast, Dinner
  *ToDo: Ballgame
}

Si la configuración especifica Today: Wednesday, la instantánea contendrá el código siguiente.

*Schedule:
{
  *Eat: Lunch
  *ToDo: FixBugs
}

Si la configuración especifica Today: Tuesday, la instantánea contendrá el código siguiente.

*Schedule:
{
  *ToDo: FixBugs
}

En el ejemplo de código siguiente se muestran dos construcciones *Switch/*Case anidadas.

*Schedule:
{
  *Switch: Today
  {
    *Case: Sunday
    {
      *Switch: Weather
      {
        *Case: Sunny
        {
            *ToDo: Garden
        }
        *Case: Cloudy
        {
            *ToDo: Laundry
        }
      }
    }
    *Case: Saturday
    {
      *ToDo: Ballgame
    }
      *Default:
      {
        *ToDo: FixBugs
      }
    }
}