Partager via


Ajout de dépendances aux données Configuration-Dependent

Les directives *Switch/*Case font dépendre les données des paramètres définis à l’aide des directives *Feature/*Option . La balise de construction de la construction *Switch nomme l’un des paramètres définis dans une construction *Feature . La référence d’un paramètre par la balise de construction de la construction *Switch peut précéder sa définition par le biais de la construction *Feature .

Le corps d’une construction *Switch contient un certain nombre de constructions *Case et une *construction facultative *Par défaut . Aucune autre entrée enfant ne peut apparaître dans la construction *Switch . La balise de construction de la construction *Case nomme l’une des valeurs autorisées définies dans une construction *Option qui correspond au paramètre nommé dans la construction *Switch . La balise de construction n’est pas utilisée pour la construction*Par défaut .

*Les constructions de commutateur peuvent apparaître en tant qu’entrées enfants dans toute autre construction, sauf qu’une construction *Switch ne peut pas être l’enfant d’une autre construction *Switch . Le corps d’une construction *Case peut contenir n’importe quelle entrée GDL, sauf que la construction *Case ne peut pas être l’ancêtre d’une construction *Feature ou *Default .

Les directives *Switch/*Case fonctionnent de manière très similaire aux constructions de langage C du même nom. Le contenu de toute construction *Case (dont la balise de construction est nommée dans la configuration comme valeur ou état actuel du paramètre nommé par la construction *Switch) est autorisé à apparaître dans le instantané. Sinon, l’analyseur empêche les entrées contenues dans la construction *Case d’apparaître dans le instantané.

Note Contrairement à la version C de *Switch/*Case, GDL n’a pas besoin d’une instruction break pour empêcher l’exécution de continuer au-delà de la fin de la construction *Case .

Si le corps d’une construction*Case est omis (c’est-à-dire que *Case apparaît en tant qu’attribut plutôt qu’en tant que construction), le corps de la construction *Case ou *Default suivante est utilisé. Ce comportement est à nouveau similaire au comportement dans le cas de commutateur/ de langageC. Si la construction *Par défaut est présente, elle doit apparaître en dernier, après toutes les entrées *Case .

Si le paramètre autorise PICKMANY, le contenu de plusieurs constructions *Case peut apparaître dans le instantané. Cette situation peut entraîner plusieurs définitions d’une même construction ou d’un même attribut. Ces définitions multiples sont gérées comme si elles apparaissaient explicitement dans le fichier GDL en dehors de toute construction *Switch/*Case . Si plusieurs constructions *Case partagent le même corps et que plusieurs d’entre elles sont nommées dans la configuration, le contenu du corps n’apparaît qu’une seule fois.

Si aucune des constructions *Case n’est nommée dans la configuration, le contenu de la *construction par défaut est utilisé. Si aucune *construction par défaut n’est définie, la construction *Switch/*Case entière et toutes ses entrées descendantes sont exclues de la instantané.

Si plusieurs constructions *Switch/*Case frères sont définies, chacune est évaluée indépendamment de l’autre. La fusion de constructions frères ne s’applique pas aux constructions *Switch/*Case .

Les directives *Switch et *Construct n’apparaissent jamais dans le instantané. Par conséquent, dans le instantané, les entrées enfants de *Caseconstruct apparaissent en tant qu’entrées enfants du parent de la construction *Switch.

Dans l’exemple de code suivant, un paramètre Today est défini pour prendre des jours de la semaine. L’exemple montre deux constructions *Switch/*Case frères ; les deux sont évaluées indépendamment.

*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 configuration spécifie Today: Saturday, le instantané contient le code suivant.

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

Si la configuration spécifie Today: Wednesday, le instantané contient le code suivant.

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

Si la configuration spécifie Today: Tuesday, le instantané contient le code suivant.

*Schedule:
{
  *ToDo: FixBugs
}

L’exemple de code suivant montre deux constructions *Switch/*Case imbriquées.

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