ローカル変数によるオブジェクト・フィールドの非表示方法について
名前がオブジェクト内のフィールドの名前と同じローカル変数を定義する場合は、評価時にこのローカル変数が現在のオブジェクトのフィールド名より優先されることに注意してください。
たとえば、オブジェクトにStatus
という名前のフィールドがある場合、次のオブジェクト検証スクリプトについて考えてみます:
// Assuming current object has a Status field, define local variable of the same name
def Status = 'Closed'
/*
* :
* Imagine pages full of complex code here
* :
*/
// If the object's current status is Open, then change it to 'Pending'
// ------------------
// POTENTIAL BUG HERE: The Status local variable takes precedence
// ------------------ so the Status field value is not used!
//
if (Status == 'Open') {
Status = 'Pending'
}
この例では、Status
という名前の変数が定義されています。 複雑なコードでページがいっぱいになった後、作成者は、前述のStatus
という名前のローカル変数も定義されていることを覚えずに、Status
という名前のカスタム・フィールドを参照します。 Status
という名前のローカル変数は常に優先されるため、現在のオブジェクトのStatus
フィールドの現在の値に関係なく、スクリプトはここで条件付きブロックに入ることはありません。 経験則として、ローカル変数の名前スキームを使用して、オブジェクト・フィールド名と名前が衝突しないようにします。