オブジェクト指向とActionScript
FlashMX 2004になって、ActionScriptが改良された。
ActionScriptとオブジェクト指向
それ以前のFlashMXは、コンパイラがプログラマを支援してくれない (存在しないメソッドを呼んでもエラーを吐かないとかいった理由で)から、 コード量が増えると、実質的にメンテナンス不可能になってしまう。
しかし、FlashMX2004になって、Javaのコーディングスタイルで、ActionScriptを 使うことができるようになった...つまり、Test.as といったファイル名で、Testクラスを 記述できる。あとは、Eclipseのプラグインが出れば、完璧か? (あるみたいだけどねaseclipseplugin)
こうやってベースとなるオブジェクトを書いてしまえば、 FlashMXは、単にデバッグのためだけに使えばOKになった。
だから今や大半のコードはviで書いている。 (FlashMX付属のActionScriptエディタは、気に入らなかったので、それをを使わずに済むのは とてもありがたい。)
これらのことは、 FlashOOP ActionScriptによるオブジェクト指向プログラミング ではじめて知ったのだが。
しかし、癖がある。
ファイル名:Test.as
コード1
class Test{
var list:Array=new Array();
function Test(){
}
function addListener(li){
list.push(li);
}
function test(){
trace(" checkSize: "+list.length );
}
}
コード2
class Test{
var list:Array;
function Test(){
list=new Array();
}
function addListener(li){
list.push(li);
}
function test(){
trace(" checkSize: "+list.length );
}
}
コード1とコード2は、 変数名 list として宣言するArrayオブジェクトのインスタンスする記述場所が 異なるだけでほかは内容が同じクラスだが、コード1の方は、list変数が クラス変数(Javaで言うと static として宣言しているのと同じ) として扱われてしまうのだった。
Java的に考えると、(static 指定していないから、)当然、list は、Testクラスのインスタンス変数と 扱われると考えてしまうのだが、実際には、クラス変数になる。\ Testクラスを複数インスタンス化して使う場合に、このことをわかっていないとはまる。