Index > オブジェクト指向とActionScript
Wed, January 12, 2005

オブジェクト指向と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クラスを複数インスタンス化して使う場合に、このことをわかっていないとはまる。

 Twitter
follow me on Twitter
 Categories