【インタビュー】

AdobeのFlash担当者に訊く - Flash Player 9とActionScript 3.0何が変わる?

2 安全性、シンプルさ、パフォーマンス、互換性の向上を目指すActionScript 3.0

    野中文雄  [2006/06/20]

    ActionScript 3.0が目指すものとは?

    ActionScript 3.0の目指すゴールとして、ダウニー氏は大きく次の4点を挙げた。以下の解説において、具体的なスクリプトの実装に関わる部分は、論旨をわかりやすくするため、Adobeの上条晃宏氏のブログと同社の「Flex 2.0 Language Reference」を参照し、注釈として書き加えた。

    (1)安全性
    ActionScript 3.0には、厳密な型付けと、コンパイル(SWF書出し)時のより強力なデバッグ機能がある。ActionScript 2.0では一旦コンパイルされたSWFファイルを再生したとき、スクリプトに問題が生じても、あっさり無視されてエラーは発生しなかった。しかし、ActionScript 3.0には、実行(ランタイム)時のエラー処理とレポート機能が加わっている。

    (2)シンプルさ
    プログラミング言語として、スタンダードなデザインになった。MoiveClipインスタンスをつくるのに、特別なメソッドを使う必要もない[*5]。イベントハンドラの扱いが、MovieClipとコンポーネントとで違うということもなくなった[*6]。プログラミング経験のある人なら直感的に理解できる、一貫性をもった言語になった。

    (3)パフォーマンス
    仮想マシンを新たに開発し、専用のActionScript言語をデザインしたことにより、処理を基本から最適化することが可能になった。そのため、処理速度は最高10倍程度まで高速化されたという。

    (4)互換性
    ActionScript 3.0は、ActionScript 2.0と同様、ECMAScript 4に準拠する[*7]。したがって、機能の大幅な強化や言語体系の改訂はあっても、構文・文法は基本的に変わらない。ActionScript 2.0からの移行は、さほど難しくはないだろう。

    [*5] プログラムでインスタンスをつくるには、「new クラス名()」というかたちでコンストラクタを呼び出すのが原則だ。ところが、MovieClipやTextFieldなどは、コンストラクタでインスタンスを生成することができず、MovieClip.createEmptyMovieClip()あるいはMovieClip.createTextField()などといった特別なメソッドを使う必要があった。ActionScript 3.0では、これらも原則どおりコンストラクタで作成することができる(akihiro kamijo「SpliteクラスとMovieClipクラス」)。
    [*6] ActionScript 1.0では、MovieClipにはMovieClip.onReleaseなどのイベントハンドラメソッドがある。また、マウスイベントはMouse.addListener()メソッドにより、リスナーで扱うことが可能だ。さらに、バーョン2アーキテクチャのコンポーネントは、EventDispatcher.addEventListener()メソッドを使って、イベントを指定したうえで、リスナー登録する。
    ActionScript 3.0では、MovieClipを始めとする多くのクラスが、EventDispatcherクラスを継承する。したがって、イベントリスナーによる扱いに統一され、リスナーの登録はEventDispatcher.addEventListener()メソッドを共通して用いるようになる(akihiro kamijo「EventDispatcherクラス」)。
    [*7]「ECMAScript 4」については、前掲注[*3]の「ActionScriptとその基本概念について」およびWord「ECMA-262第3版と第4版」を参照。

    ActionScript 3.0に追加された機能

    細かな点まで含めれば、ActionScript 3.0で追加された機能は膨大になる。その中からダウニー氏に、トピック的に重要なものをいくつかを挙げてもらった。

    まず、「E4X(ECMAScript for XML)」がサポートされた。これは、ECMAScriptの拡張として、XMLデータを扱うための仕様だ。スクリプト中にXMLデータを直接記述でき、これまでよりずっと簡単に処理することが可能になった[*8]。

    次に、以前から要望の多かった「正規表現」の実装だ。RegExpクラスには、正規表現パターンを使ったマッチングや、テキストの検索・置換を行うメソッドが備わっている[*9]。これで、文字列の操作も、かなり楽になるだろう。

    また、MovieClipなど画面に表示されるインスタンスを管理する仕組みとして、ディスプレイリストが加わった。ディスプレイリストに追加されたインスタンスは、配列エレメントのように整数インデックスで管理される[*10]。その値が大きいほど、手前に表示される。ActionScript 3.0では、この整数インデックスが重なり順を決めるので、深度はもはや使用されない。

    最後に、Spriteクラスについて説明しよう。Spriteは、MovieClipからスクリプトで扱うために必要な基本部分を取出したものだ。たとえば、ビジュアルエレメントをスクリプトで生成・コントロールしようとした場合、タイムラインは必要でない。したがって、Spriteはタイムラインをもたない。その分、MovieClipよりも動作が軽くなる。ActionScriptの体系上はSpriteをベースとして、MovieClipはタイムラインやその他の機能・属性を加えたサブクラスという位置づけになる[*11]。

    [*8] スクリプトの中で、XMLデータをリテラル記述できる。配列アクセス演算子[]を使って配列を記述すればArrayインスタンスが初期化できるように、XMLのタグ<>を使ってXMLデータを記述することでXMLインスタンスが作成できる。ノードのデータや属性へのアクセスも簡単だ。詳しくは、akihiro kamijo「E4X」を参照してほしい。
    [*9] RegExpクラスについては、akihiro kamijo「AS3と正規表現」を参照。RegExpクラスは、同じECMAScriptのJavaScriptにも実装されている。
    [*10] ディスプレイリストを使ってインスタンスを管理するのは、DisplayObjectContainerクラスだ。DisplayObjectContainer.addChild()/DisplayObjectContainer.removeChild()メソッドによってインスタンスの追加や削除を行い、getChildIndex()/setChildIndex()メソッドで整数インデックスを取得/設定することができる。akihiro kamijo「DisplayObjectContainerクラス」参照。
    [*11] MovieClipはSpriteクラスを継承し、Spriteはさらにディスプレイリストを管理するDisplayObjectContainerクラスを継承している(Flex 2.0 Language Reference「Class MovieClip」)。Spriteクラスについて詳しくは、前掲注[*5]akihiro kamijo「SpliteクラスとMovieClipクラス」を参照。

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン