Geogebra ScriptとIf[]コマンド
はじめに
数値オブジェクトa=0を用意する。
ボタンbutton1を押すと、aが1になり、もう一度押すと0になり、さらにもう一度押すと1になり...。
このように、button1を押すごとにaの値が0→1→0→1と変化するようにするには、どうすればよいでしょうか。
うまくいかない例1
button1のOn Click スクリプトに、以下のように記述する。
If[a==0,SetValue[a,1]]
If[a==1,SetValue[a,0]]
a=0のときには1行目が実行されてaは1になり、a=1のときには2行目が実行されてaは0になる。
一見するとうまくいきそうなスクリプトですが、実際には何度button1を押しても、aは0から変化しません。
aの初期値は0ですから、button1を押すと、まず1行目が実行されて、a=1になります。しかし、aが1になることによって、2行目のIf条件を満たしてしまいました。そのためただちに2行目が実行されて、aは0に戻ってしまうのです。
うまくいかない例2
If[a==1,SetValue[a,0]]
If[a==0,SetValue[a,1]]
それならば、 1行目と2行目を入れ替えたらどうでしょうか。
初期値a=0の状態でbutton1を1回押すと、1行目は実行されず、2行目だけが実行されて終わります。したがってaは1になります。それから先は、上記の例1と同じ理由で、いくらbutton1を押しても、a=1のままです。
うまくいく例2
下記のように、スクリプトを1行にまとめれば、うまくいきます。
If[a==1,SetValue[a,0],SetValue[a,1]]
うまくいく例2
技巧的ですが、以下のように記述しても、うまくいきます。
If[a==1,SetValue[a,0.5]]
If[a==0,SetValue[a,1]]
If[a==0.5,SetValue[a,0]]
a=0のときは2行目だけが実行されて終わりです。
a=1のときは、いったんaを0.5に変えて、2行目の実行を回避した後、3行目で0に変えます。