UJMLサンプル103:ステート変数の挙動を学ぶ→実行順序とスナップショットの話?(2006/04/23)
これまで、
<script>ブロックの処理中は他の処理が割り込めない
と説明してきたが、今回は念のための注意点を説明する。
まず、下のようなUJMLがあったとする。(※必要個所のみ抜粋)★1の<script>ブロックでは、sLabelとsLabel2の<text>の内容を書き換えて再表示する指示をしている。
これまでの説明では、<script>ブロックの処理中はイベントの割り込みを受けないと書いた、もちろんこの場合も<script>★1が終わってから、sLabelの表示、sLabel2の表示となる。
質問:<script>★1の終了時点ではmIの値は"2"である。では、sLabel,sLabel2共に表示されるラベルの値は共に"2"だろうか?それとも、sLabelは"1"、sLabel2は"2"となるだろうか?
答えはもちろん後者だ。<script>ブロックの後に行われるのは「表示処理」だけであり、ブロック内で指示されたステート変数の変化による処理は通常の関数と同じようにその時点で処理されるということだ。
---
<event name="onSelect">
<accelerators>
<key>FIRE</key>
</accelerators>
<script>★1
mI = 0;
sLabel = false;
sLabel = true;
mI = 1;
sLabel2 = false;
sLabel2 = true;
</script>
---
<state var="sLabel">
<transition value="true">
<display>
<label>
<text><eval>mI</eval></text>
<bg>&_COLOR_WHITE;</bg>
</label>
</display>
</transition>
</state>
<state var="sLabel2">
<transition value="true">
<display>
<label>
<text><eval>mI</eval></text>
<x>30</x>
<bg>&_COLOR_WHITE;</bg>
</label>
</display>
</transition>
</state>
---
コメント