あるオブジェクトのOn Update スクリプトと、そのオブジェクトに従属する、他のオブジェクトの再計算の実行順序
専門的な記事になりますが、GeogebraのOn Update スクリプトを理解するうえで重要な内容です。
アプレットの説明
点A、点Cは、x軸上の任意の点です。
点Bは、点Aに依存するオブジェクトであり、( x(A)+1, 0 )で定義されています。
アプレット下部の「←」「→」ボタンをクリックすると、以下のコマンドが実行されることにより、点Aを左右に動かすことができます。
「←」ボタン
SetValue[A,(x(A)-0.5,0)]
「→」ボタン
SetValue[A,(x(A)+0.5,0)]
スクリプティング
「AのOn Update スクリプトに設定」チェックボックスをチェックすると、点AのOn Update スクリプトに以下の内容が記述されます。ここでは、「行頭にUpdateConstruction[ ]を記述」チェックボックスはチェックしないでください(チェックした場合の挙動については後述します)。
SetValue[C,B]
「BのOn Update スクリプトに設定」チェックボックスをチェックすると、点BのOn Update スクリプトに以下の内容が記述されます。その際には、点AのOn Update スクリプトは消去されるように設定しています。
SetValue[C,B]
挙動の確認
ボタンを押すと、点Aはもちろん、それに依存している点Bも座標が更新されるため、一見、どちらの点のOn Update スクリプトに記述しようと、挙動は変わらないようにも思われます。
しかし、実際に比較してみると、点AのOn Update スクリプトに記述した場合には、点Cは、更新前の点Bの座標に移動しているのに対し、点BのOn Update スクリプトに記述した場合には、点Cは、更新後の点Bの座標に移動していることが分かります。
点AのOn Update スクリプトに記述した場合
点Aの座標が更新される
点AのOn Update スクリプトが実行される
点Aに依存しているオブジェクト(点B)が更新される
点BのOn Update スクリプトに記述した場合
点Aの座標が更新される
点Aに依存しているオブジェクト(点B)が更新される
点BのOn Update スクリプトが実行される
このことから、あるオブジェクトPのOn Update スクリプトの実行による他のオブジェクトQの更新は、QがPに依存していることから起こる再計算によるQの更新に優先することが分かります。
UpdateConstruction コマンドを使用した場合
「AのOn Update スクリプトに設定」チェックボックスをチェックし、さらに「行頭にUpdateConstruction[ ]を記述」チェックボックスをチェックすると、点AのOn Update スクリプトに以下の内容が記述されます。
UpdateConstruction[ ]
SetValue[C,B]
この場合の挙動は、点BのOn Update スクリプトにSetValue[C,B]を記述した場合と同様に、点Cが、更新後の点Bの座標に移動します。
挙動の分析
①点Aの座標が更新される
②点AのOn Update スクリプト1行目が実行されることで、点Aに依存しているオブジェクト(点B)が再計算される
③点AのOn Update スクリプト2行目が実行されることで、点Cの座標が再計算後の点Bの座標に設定される
④点Aに依存しているオブジェクト(点B)が更新される
補足
仮に点BにOn Update スクリプトが記述されていたとして、上記②で、UpdateConstruction[ ] コマンドによって点Bが再計算されたとしても、その時点では点BのOn Update スクリプトは実行されず、あくまで④で実行されます。