機械翻訳について

ローカル変数によるオブジェクト・フィールドの非表示方法について

名前がオブジェクト内のフィールドの名前と同じローカル変数を定義する場合は、評価時にこのローカル変数が現在のオブジェクトのフィールド名より優先されることに注意してください。

たとえば、オブジェクトに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フィールドの現在の値に関係なく、スクリプトはここで条件付きブロックに入ることはありません。 経験則として、ローカル変数の名前スキームを使用して、オブジェクト・フィールド名と名前が衝突しないようにします。