&ltif&gt

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

文法

<if condition="#{@foo >= 4}">
 (要素)
<elsif condition="#{@foo >= 2}" />
 (要素)
<else />
 (要素)
</if>

属性

(必須)condition="論理値"
主に式展開による条件式を記述します。条件式は論理値に置換されます。

上の例では、変数@fooの値が4以上の場合最初のブロックが評価され、@fooの値が4未満かつ2以上であれば2番めのブロックが、2未満であれば<else>から始まる最後のブロックが評価されます。

このように<if>はブロックを発生させるタグです。
<if>
<elsif/>
<else/>
のいずれかのタグの直後から
<elsif/>
<else/>
</if>
のいずれかのタグの直前までが1つの分岐ブロックです。

<if>が見つかった場合、condition属性がTRUEならそのブロックを解釈し、</if>まで解釈をスキップします。conditionがFALSEなら、ブロックの終わりまで解釈をスキップします。
<elsif>が見つかると、condition属性がTRUEならそのブロックを解釈し、</if>まで解釈をスキップします。conditionがFALSEなら、ブロックの終わりまで解釈をスキップします。
<else>が見つかると、そのブロックを解釈します。

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

要素

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

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

分岐構文


親要素


動的予約変数が含まれた条件式は、そのifが含まれる<bar>が解釈されるタイミング(time属性)での値を参照します。

ノートオブジェクトは、それが実際に判定処理されるより前に譜面として流れてくる必要があります。判定タイミングの何秒前に生成されるかは実装やハイスピードに依存しますが、動的予約変数はノートを生成する時点での値が参照されるので、必然的にリアルタイム性が乏しくなります。
「スコア何点以上で譜面内容が変化する」といった条件分岐は可能ですが、正しく動作するかは実装に依存するため推奨されません。

ノートオブジェクトでないタイミングオブジェクトは、たとえばある小節の前半に通常のオブジェクト、後半に<if condition="#{@combo >= 100}">で囲まれたオブジェクトがあった場合、小節突入時点でのコンボ数が参照されます。97コンボで小節に突入し、その小節内の<if>より前で100コンボに到達したとしても、条件を満たしたことにはなりません。

動的予約変数は<if>が<bar>の内側にある場合にのみ有効です。<head>内や、<body>内であっても<bar>の外側では、静的予約変数か事前に宣言された変数のみを用いることができます。
静的予約変数や宣言された変数はXOSを解釈するとき、すなわち譜面データのロード中に決定されます。
最終更新:2015年01月13日 17:40