構成依存データに依存関係を追加する
*Switch/*Case ディレクティブは、*Feature/*Option ディレクティブを使って定義されたパラメーターにデータを依存させます。 *Switch コンストラクトのコンストラクト タグは、*Feature コンストラクトで定義されているパラメーターの 1 つに名前を付けます。 *Switch コンストラクトのコンストラクト タグによるパラメーターの参照は、*Feature コンストラクトを介してその定義の前に置く場合があります。
*Switch コンストラクトの本体には、多数の *Case コンストラクトとオプションの *Default コンストラクトが含まれています。 *Switch コンストラクト内に他の子エントリを表示することはできません。 *Case コンストラクトのコンストラクト タグは、*Switch コンストラクトで指定されたパラメーターに対応する *Option コンストラクトで定義されている許容値の 1 つに名前を付けます。 コンストラクト タグは、*Default コンストラクトには使用されません。
*Switch コンストラクトは、*Switch コンストラクトを別の *Switch コンストラクトの子にできないことを除き、他のコンストラクト内の子エントリとして表示できます。 *Case コンストラクトの本体には任意の GDL エントリを含めることができます。ただし、*Case コンストラクトを *Feature または *Default コンストラクトの先祖にすることはできません。
*Switch/*Case ディレクティブは、同じ名前の C 言語コンストラクトとよく似ています。 *Switch コンストラクトによって名前が付けられたパラメーターの現在の値または状態として構成で名前が付けられた *Case コンストラクトの内容は、スナップショットに表示できます。 それ以外の場合、パーサーは、*Case コンストラクトに含まれているエントリがスナップショットに表示されないようにします。
注 : C バージョンの *Switch/*Case とは異なり、GDL では、*Case コンストラクトの末尾を過ぎても実行を停止するために break ステートメントは必要ありません。
*Case コンストラクトの本体を省略した場合 (つまり、*Case はコンストラクトではなく属性として表示されます)、次の *Case または *Default コンストラクトの本文が使用されます。 この動作は、C 言語の Switch/Case の動作に再び似ています。 *Default コンストラクトが存在する場合は、すべての *Case エントリの後に最後に表示する必要があります。
パラメーターで PICKMANY が許可されている場合、複数の *Case コンストラクトの内容をスナップショットに表示できます。 このような状況では、同じコンストラクトまたは属性の複数の定義が発生する可能性があります。 このような複数の定義は、*Switch/*Case コンストラクトの外部にある GDL ファイルに明示的に出現する場合と同様に処理されます。 複数の *Case コンストラクトが同じ本文を共有し、構成に複数の名前が付けられている場合、本文の内容は 1 回だけ表示されます。
構成に *Case コンストラクトの名前が指定されていない場合は、*Default コンストラクトの内容が使用されます。 *Default/ コンストラクトが定義されていない場合は、*Switch*Case コンストラクト全体とその子孫エントリがすべてスナップショットから除外されます。
複数の兄弟 *Switch/*Case コンストラクトが定義されている場合、それぞれが他方とは独立して評価されます。 兄弟コンストラクトのマージは、*Switch/*Case コンストラクトには適用されません。
*Switch ディレクティブと *Construct ディレクティブはスナップショットに表示されないため、スナップショットでは、*Case コンストラクトの子エントリが *Switch コンストラクトの親の子エントリとして表示されます。
次のコード例では、Today パラメーターは曜日を取得するように定義されています。 この例では、2 つの兄弟 *Switch/*Case コンストラクトが示されており、両方が個別に評価されます。
*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
}
}
}
構成で指定Today: Saturday
されている場合、スナップショットには次のコードが含まれます。
*Schedule:
{
*Eat: Breakfast, Dinner
*ToDo: Ballgame
}
構成で指定Today: Wednesday
されている場合、スナップショットには次のコードが含まれます。
*Schedule:
{
*Eat: Lunch
*ToDo: FixBugs
}
構成で指定Today: Tuesday
されている場合、スナップショットには次のコードが含まれます。
*Schedule:
{
*ToDo: FixBugs
}
次のコード例は、2 つのネストされた *Switch/*Case 構造を示しています。
*Schedule:
{
*Switch: Today
{
*Case: Sunday
{
*Switch: Weather
{
*Case: Sunny
{
*ToDo: Garden
}
*Case: Cloudy
{
*ToDo: Laundry
}
}
}
*Case: Saturday
{
*ToDo: Ballgame
}
*Default:
{
*ToDo: FixBugs
}
}
}