Essential ActionScript 3.0 読書メモ 第23回 thisの省略と名前解決

今日からChapter 3「Instance Methods Revisited」。

thisキーワードが、コンストラクターメソッド及びインスタンスメソッドにおいて、カレントオブジェクト(current object、現在進行形で作成・実行されているオブジェクト)を指し示すのに使われることは、すでに学んだとおり。
例:

public function Blog (words) {
    this.title = words;
}

しかし、カレントオブジェクトに頻繁にアクセスするコードの中で、いちいちthisを書くのはわずわらしいし、可読性を下げる。ActionScriptでは、カレントオブジェクトのインスタンス変数とインスタンスメソッドにアクセスする際に、thisを省略することができる。

コンストラクターメソッド又はインスタンスメソッドの中で、ActionScriptが式の中の識別子に遭遇すると、ActionScriptはローカル変数、パラメーター、ネストされた関数を探索する。これらの中に、識別子に該当するものが存在しない場合、ActionScriptはインスタンス変数又はインスタンスメソッドから名前の一致するものがないか探索する。もし見つかれば、そのインスタンス変数又はインスタンスメソッドが、式の変数として使われる。

例:
class Pet {
  var currentCalories; // インスタンス変数
  public function eat (numberOfCalories) {
    currentCalories += numberOfCalories;
    // 上の式は、 this.currentCalories += numberOfCalories; と等価
  }
}

eat()メソッドが実行されると、ActionScriptはまず、numberOfCaloriesという識別子に遭遇する。そして、ローカル変数、パラメーター、ネストされた関数から一致する名前のものを探す。ここでは、numberOfCaloriesというパラメーターがメソッドに対して与えられているから、メソッドの本文中のnumberOfCaloriesとは、パラメーターとして与えられたnumberOfCaloriesのことだ、と解釈する。

次に、currentCaloriesという識別子に遭遇する。ローカル変数、パラメーター、ネストされた関数から一致する名前のものを探すが、見つからない。そこで、ActionScriptは、インスタンス変数とインスタンスメソッドから同名のものを探索する。すると、currentCaloriesというインスタンス変数が見つかるので、ActionScritptはそのインスタンス変数をeat()メソッド内のcurrentCaloriesとして用いる。

このように、プログラムの処理系が識別子の名前をもとにして変数や関数を探索することを、「名前解決(identifier resolution)」と呼ぶ。

今日の進捗:402→415/4343

コメントを残す