【インタビュー】
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で追加された機能は膨大になる。その中からダウニー氏に、トピック的に重要なものをいくつかを挙げてもらった。
まず、「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クラス」を参照。
| Behringer、「XENYX iX」シリーズにiPad用Dock搭載の3モデルを追加 [16:51 2/10] |
| Behringer、iPadの入出力を拡張できるドッキングステーション発表 [16:05 2/10] |
| iPadでワイヤレス操作可能な16chデジタルミキサー「MACKIE DL1608」 [15:43 2/10] |
| Avid、本格的なムービー制作を実現するiPadアプリ「Avid Studio」発売 [15:17 2/10] |
| 優れた住宅設計を選ぶ「第32回 INAXデザインコンテスト」の審査結果発表 [17:33 2/9] |
|
TVウォッチャーの芸能まるごと1週間 - メイサ&赤西結婚、花子妊娠に沸いた [17:10 2/10] エンタメ |
|
竹達彩奈、デビューシングル「Sinfonia! Sinfonia!!!」を4/11にリリース [17:02 2/10] ホビー |
|
一緒に住むのをためらってしまう相手のクセとは? [17:00 2/10] キャリア |
|
日産、スカイラインクーペ特別仕様車「55th Limited」を55台限定発売 [16:54 2/10] ライフ |
|
Behringer、「XENYX iX」シリーズにiPad用Dock搭載の3モデルを追加 [16:51 2/10] クリエイティブ |