use関数の振る舞い
- 概要
- スクリプト関数の1つである use() 関数について解説します。
1. PASSCELL Enterprise 版/PASSCELL Personal 版での use() 関数の違い
use()関数は、PASSCELL Personal とPASSCELL Enterprise の両方で利用できますが、それぞれの環境での use() 関数の動作は異なります。
1) 引数
Enterpriseでは引数は2つ、一方Personal では引数は1つです。
Enterprise:
use("[辞書コード]", [サブコード])
Personal:
use("[ノードのフルネーム]")
2) 対象となるノード
両者は、use()の対象となるノードが異なります。
Enterprise:
対象となるノードは、辞書に登録されているノードのみ
Personal:
対象となるノードは、
・現在開かれているプロジェクトに含まれるノード全て
これには、
ドロップダウンされた *.psl プロジェクトに含まれるノード
下位ページに存在するノード
も含まれます。
3) use() されたノードに対する変更
両者は、use()によって生成されたノードに対する編集でも違いがあります。
Enterprise:
生成されたノードは、自由に変数値を編集可能
Personal:
生成されたノードでは、変数値が一切編集が出来ない
2. PASSCELL Personal における use() 関数の基本動作
上記の"3) use() されたノードに対する変更"で触れた、 『Personalの use() 関数で生成されたノードでは、一切編集が出来ない』という制約がどこから生じているのかを説明します。
Personal における use() で生成されたノードの特性
use() によって生成されているノードは、画面上では1つのノードとして見えていますが、実際には Windows 上での"ショートカット"のように、実際にはそこには存在せず、オリジナルのノードが一時的にコピーされているだけのものなのです。
したがって、オリジナルノードを変更すれば、use() されているノードも変化します。
use() され生成されているノードは、実体としては存在せず、元のオリジナルノードの変数値が常に反映されていることになります。
このために、use()されているノードは、値を一旦設定したかのように見えても保存されないため、他のノードをクリックした後、変更したはずのノードを確認すると値が入っていないことになります。
さらにPASSCELL Personal における use() 関数は、以下のような動作を行います。
Personal におけるスクリプト評価時の use() で生成されたノードの動作
1) 任意のノードからフォーカスが外れた時点で、スクリプトが評価される
2) 評価する前に、use() 関数によって生成されていたノードは、すべて一旦削除される
この動作は、削除しないとuse() されたノードが評価のたびにいくらでもできることになるためです。
このために use() されているノードには値が保存できないことになります。
このような動作仕様になっている背景には、2つの要素があります。
a) 1つ目は、PASSCELL Personal は、スクリプトの「評価」を明示的に行う必要がなく、ちょうどExcelの表計算において、任意のセルの値を変化させるとそのセルが合計の要素として含む合計セルが自動的に変化するような使い方を意図しています。
この方針の利点は、値を変更させるたびに評価を明示的に実行しなくて済む、という点です。
これによって、常に値が最新かどうかを気にすることなく利用できるという点をメリットとしてとらえているのです。
b) 2つ目として、『useで生成したノードを削除する手間を除く』という意図があります。
use() されると、ノードが子ノードとして生成されます。再度use() すると、再びノードが生成されます。
したがって、もし前回のノードが不要ならば前回 use() されたノードを意図的に手作業で削除しなければならず、わずらわしくなります。
これらの理由によって、ノードの位置や枠サイズを変更してもスクリプト評価の度にオリジナルノードのサイズや位置関係に戻ってしまうのです。