&ltswitch&gt

<switch>は、条件分岐を示す特殊タグです。

文法

<switch value="#{@foo}">
<case value="1" />
 (要素)
<case value="2" />
 (要素)
<else />
 (要素)
</switch>

属性

(必須)value="文字列"
主に式展開による条件値を記述します。

上の例では、変数@fooの値が1なら最初の<case>ブロックを、2なら次の<case>ブロックを、どちらでもないなら<else>ブロックを評価します。

<switch>は<if>と同じくブロックを発生させるタグです。
<case/>
<else/>
のいずれかのタグの直後から
<case/>
<else/>
</switch>
のいずれかのタグの直前までが1つの分岐ブロックです。
<switch>自身はブロックの開始タグではありません

<switch>が見つかった場合、まずvalue属性を評価し、有効な値が得られた場合は次のブロックを探します。有効な値が得られなかった場合は</switch>まで解釈をスキップします。有効でない値は、例えば式展開定義されていない変数を使った場合などに発生します。
<case>が見つかると、これと先の<switch>のvalue属性を==比較します。評価結果がTRUE(等しい)ならそのブロックを解釈し、</switch>まで解釈をスキップします。FALSE(等しくない)ならブロックの終わりまで解釈をスキップします。
<else>が見つかると、そのブロックを解釈します。

1つの<switch>要素内で解釈されるブロックはいずれか1つだけです。<else>が無く、<switch>のvalueがどの<case>のvalueとも一致しない場合、<switch>の要素は全て解釈されません。

<switch>による条件分岐は、本質的には<if>によるものと同じです。文法欄にある記述例は、<if>を用いて、
<if condition="#{@foo == 1}">
 (要素)
<else condition="#{@foo == 2}" />
 (要素)
<else />
 (要素)
</if>
と記述しても同じことです。
<switch>は1種類の値と別の値とを順次比較するため、例えば1つの@randの値によって枝分かれさせたい場合に記述を簡素にすることができます。

要素

<case>は任意の数置くことができます。
<else>ブロックは</switch>の直前に1回だけ置くことができます。

<switch>は<bar>を除くグループタグを内包することはできません。
分岐ブロック内の要素は、特殊タグが無いときと同様に記述します。

分岐構文


親要素


式に予約変数を使う際の注意は<if>を参照してください。
最終更新:2015年01月13日 17:41