- 2009年5月21日 14:56
- ActionScript 3.0
ネームスペースとも呼ばれる名前空間は、ActionScript 3.0 * パッケージと名前空間では、以下のように説明されています。
名前空間では、作成したプロパティおよびメソッドの可視性を制御することができます。 public、private、protected、および internal アクセス制御指定子は、ビルトイン名前空間のようなものです。これらのあらかじめ定義されているアクセス制御指定子が要件を満たさない場合は、独自の名前空間を作成することができます。
上述でも説明されているように、public、private、protectedなどのアクセス制御指定子はメソッドやプロパティに対して外部からのアクセスを制御します。名前空間はそれのカスタムとも言うべきもので、メソッドやプロパティに対してアクセス制御を掛けることができるようになります。同名のメソッドやプロパティでも、名前空間を使って制御することによって文脈的な意味づけを付加することができるわけです。名前空間によって制御されたメソッドは、:: name qualifier演算子 を使ってアクセスすることができます。以下のサンプルコードでは、二つのanswer()メソッドが名前空間によって修飾されています。名前空間としてcorrect(正解)とwrong(不正)を用意することで、if文なしで条件分岐ができるわけです。
namespace correct = "http://example.com/correct";
namespace wrong = "http://example.com/wrong";
correct function answer():void{}
wrong function answer():void{}
correct::answer();
ここでのポイントは、名前空間は変数にNamespaceクラスとして代入が出来るということにあります。変数に与える名前空間を切り替えることで、ダイナミックに実行されるメソッドを切り替えることができます。下記のサンプルでは、if文を使わず、変数currentModeを切り替えて、その状態によってchange()メソッドを振り分けています。
package {
import flash.display.MovieClip;
public class TestExample extends MovieClip {
namespace on = "http://example.com/on"
namespace off = "http://example.com/off"
var currentMode:Namespace = off;
public function TestExample():void {
currentMode::change()//出力 off
currentMode = on;
currentMode::change();//出力 on
}
on function change():void {
trace("on")
}
off function change():void {
trace("off")
}
}
}



