こころ

どうして想定通りに動作しないのか、実際にワードをヒットさせて確認してみます






こころ

まず、変数は↑のようなものを用意しておきます
それぞれ、年月日の数値を覚えさせておくための変数ですね


そして、ワードは以下のように設定します






こころ

自分のベイビーに行き、「ログインボーナス」と話しかけてみます






こころ

ちゃんとワードはヒットしました


では、ここでもう一度「ログインボーナス」と話しかけると…






こころ

またワードがヒットしてしまいます


想定では、変数が今日の日付に上書きされて、ヒット条件を満たさなくなってワードがヒットしないはずです


自分のベイビーに話しかけている場合、変数の状態が表示されているので、それを見てみます






こころ

…変数が今日の日付に変わっていませんね


つまり、この設定ではワードはヒットしますが、変数の代入が行われないということになります。


…もう少し詳しく調査してみます






こころ

実験用の変数を作りました






こころ

変数の設定を↑のように変更しました
初期状態が0の変数A,B,C,Dに 1 を代入させようとしています


この状態でワードをヒットさせて、変数の状態を確認してみます
すると…






こころ

AとBのみ変数が書き換わりました


別ワードで【年】,【月】,【日】の状態を書き換えて、他の状態の時の動作も確認してみます






こころ

↑のようなワードを作りました


【年】,【月】,【日】に任意の数値を設定し、A,B,C,Dを初期化するためのワードです


一度このワードをヒットさせて、変数の状態を強制的に変更します
ワードをヒットさせた時のページで、変数の状態を確認すると変数の状態が変化しているはずです


この実験をした日は2022年3月30日だったので、その前日の日付の状態にしています


その後、もう一度「ログインボーナス」と話しかけてみます
すると…






こころ

今度は、AとDのみ変数が書き換わりました






こころ

今度は【月】の数値を先月の数値に設定して、同じように変数書き換え用ワードをヒットさせ変数を初期化してから、
同様に「ログインボーナス」のワードをヒットさせてみます






こころ

今度はAとCが変化した
ちなみに、日付を現在の日付と全く同じに設定すると、「ログインボーナス」のワードは当然ヒットしません


他にも複数のパターンを試してみたところ…




if, else ifを使用した場合
ワードのヒット自体はどれかの条件を満たす場合にヒット
 
変数は、先頭行からif までの間の set と、
上から条件を確認して行き、
最初に条件を満たしたifまたはelse if から、次のelse ifまたは最終行までの間の set のみ実行される



こころ

という仕様であることが分かりました


分かりやすく色分けするとこんな感じです






こころ

赤枠の条件を満たした場合は先頭のA赤線部のBのみ、
赤枠は条件を満たさず、青枠の条件を満たした場合は、
先頭のA青線部のCのみ…といった感じです


つまり、最初に設定していた変数での set の処理は、最後のelse if のみが条件を満たす時にだけ実行されるという意味になります


初期値が全て0で、条件式としては≠0(0でない場合)となって、全ての条件を満たすことになります
最初の【年】の条件式の時点で条件を満たすので、そこから次のelse ifまでの間にある set しか実行されないわけです


本来なら、条件を満たした行から次のelse ifまでは、全部実行されても良さそうですが、最初のだけが実行されて、その後は条件を満たしていても無視されてしまうんですね







名前:小泉 花陽

おかわり293杯目

おかわり!