ActionScript 3.0 の概要

ActionScript について

ActionScript は Adobe® Flash® Player および Adobe® AIR™ のランタイム環境用のプログラム言語で、 Flash、Flex および AIR コンテンツおよびアプリケーションでのユーザー操作やデータ処理などを可能にします。

ActionScript は、Flash Player および AIR の一部である ActionScript 仮想マシン(AVM)により実行されます。ActionScript コードは、通常、コンパイラーによってバイトコード形式に変換されます。(バイトコードは、コンピューターによって書き込まれ、認識されるプログラミング言語の一種です。)コンパイラーの例として、Adobe® Flash® Professional や Adobe® Flash® Builder™ に内蔵されているもの、Adobe® Flex™ SDK で使用可能なものがあります。バイトコードは、Flash Player と AIR によって実行される SWF ファイルに埋め込まれます。

ActionScript 3.0 は、オブジェクト指向プログラミングの基礎知識を持つ開発者にはなじみのある堅牢なプログラミングモデルを提供します。ActionScript の以前のバージョンから改善された ActionScript 3.0 の一部の主要な機能は次のとおりです。

  • AVM2 という新しい ActionScript 仮想マシン。新しいバイトコード命令セットを使用し、パフォーマンスを大幅に向上させます。

  • コンパイラーの以前のバージョンより詳細な最適化を実行するより現代的なコンパイラーコードベース

  • 拡張および改良されたアプリケーションプログラミングインターフェイス(API)。オブジェクトの低レベルコントロールと真のオブジェクト指向モデルを備えています。

  • ECMAScript for XML(E4X)仕様(ECMA-357 edition 2)に準拠した XML API。 E4X は、言語のネイティブデータ型として XML を追加する ECMAScript 言語拡張です。

  • ドキュメントオブジェクトモデル(DOM)Level 3 Events 仕様に準拠したイベントモデル。

ActionScript 3.0 の利点

ActionScript 3.0 は、旧バージョンの ActionScript のスクリプト機能を上回っています。 大容量のデータセットおよびオブジェクト指向の再利用可能なコードベースを使用する非常に複雑なアプリケーションを容易に作成できるように設計されています。 ActionScript 3.0 は、Adobe Flash Player で実行されるコンテンツには必要ありませんが、新しい仮想マシン AVM2(ActionScript 3.0 仮想マシン)でのみ可能なパフォーマンスの向上を実現します。ActionScript 3.0 コードは、従来の ActionScript コードより最大で 10 倍高速に実行できます。

古いバージョンの ActionScript 仮想マシン AVM1 は、ActionScript 1.0 および ActionScript 2.0 のコードを実行します。Flash Player 9 および 10 では、後方互換性を維持するために AVM1 がサポートされています。

ActionScript 3.0 の新機能

ActionScript 3.0 には ActionScript 1.0 と 2.0 と同様のクラスと機能が多く含まれていますが、旧バージョンの ActionScript とはそのアーキテクチャや概念が異なります。ActionScript 3.0 の強化点には、コア言語の新機能および低レベルオブジェクトの制御を高める改良された API があります。

コア言語機能

コア言語は、ステートメント、式、条件、ループ、型などのプログラミング言語の基本的な要素を定義します。 ActionScript 3.0 には、開発プロセスの効率化を促す多くの新機能が備わっています。

ランタイム例外

ActionScript 3.0 では、旧バージョンの ActionScript より多くのエラー状態が報告されます。 ランタイム例外を一般的なエラー状態に使用すると、デバッグの操作性が向上し、エラーを確実に処理するアプリケーションを開発することができます。 ランタイムエラーには、ソースファイルおよび行番号情報で注釈を付けたスタックトレースがあり、エラーをすばやく特定できます。

ランタイム型

ActionScript 3.0 では、型情報は実行時に維持されます。型情報はランタイム型チェックの実行に使用され、システムの型の安全性を向上させます。また、型情報はネイティブのマシン表現で変数を表すためにも使用され、パフォーマンスを向上させ、メモリの使用量を削減します。これに対して、ActionScript 2.0 では型注釈は主に開発者を補助するもので、実行時にすべての値が動的に入力されました。

sealed クラス

ActionScript 3.0 には、sealed クラスの概念が導入されています。sealed クラスには、コンパイル時に定義された一定のプロパティとメソッドだけが含まれ、その他のプロパティやメソッドを追加することはできません。実行時にクラスを変更できないため、より厳密にコンパイル時のチェックを行うことができ、堅牢性の高いプログラムを作成できます。また、各オブジェクトインスタンスの内部ハッシュテーブルが不要になり、メモリの使用量を削減できます。 dynamic キーワードを使用してダイナミッククラスも使用できます。ActionScript 3.0 のクラスはすべてデフォルトで sealed クラスになりますが、 dynamic キーワードを使用してダイナミッククラスとして宣言することもできます。

メソッドクロージャ

ActionScript 3.0 では、元のオブジェクトインスタンスを自動的に記憶するメソッドクロージャが有効です。 この機能はイベント処理に役立ちます。 ActionScript 2.0 では、メソッドクロージャに抽出元のオブジェクトインスタンスが記憶されず、メソッドクロージャが呼び出されたときに予期しない動作が発生しました。

ECMAScript for XML(E4X)

ActionScript 3.0 は、最近 ECMA-357 として標準化された ECMAScript for XML(E4X)を実装しています。E4X は、XML を操作するための自然で滑らかな言語コンストラクトを提供します。従来の XML 解析 API とは異なり、E4X の XML は、その言語のネイティブデータ型のように動作します。 E4X は、必要なコード量を大幅に削減して、XML を操作するアプリケーションの開発を簡略化します。

ECMA の E4X 仕様を確認するには、 www.ecma-international.org を参照してください。

正規表現

ActionScript 3.0 では正規表現がネイティブにサポートされているので、ストリングをすばやく検索し、操作できます。 ActionScript 3.0 は、ECMAScript Edition 3 言語仕様(ECMA-262)で定義されている正規表現のサポートを実装しています。

名前空間

名前空間は、宣言( public private protected )の可視性を制御するために使用する通常のアクセス指定子に似ています。名前空間は、カスタムアクセス指定子として動作し、任意の名前を指定できます。 名前空間には、競合を回避するために URI(Universal Resource Identifier)が割り当てられています。また、E4X を使用するときに XML 名前空間を表すためにも使用します。

新しいプリミティブ型

ActionScript 3.0 には、Number、int、uint という 3 つの数値型があります。Number 型は、倍精度浮動小数点数を表します。int 型は、ActionScript コードが CPU の高速整数演算機能を活用できる 32 ビット符号付き整数で、 整数が使用されるループカウンターや変数に便利です。 uint 型は符号なしの 32 ビット整数型で、RGB カラー値、バイトカウントなどに便利です。ActionScript 2.0 では、使用できる数値型は Number 型のみでした。

API 機能

ActionScript 3.0 の API には、オブジェクトを低いレベルで制御できる多数のクラスが追加されています。この言語のアーキテクチャは、以前のバージョンより直観的に設計されています。新しく追加されたクラスが多いため、すべてを詳しく説明はしませんが、大きく変更されたいくつかについて次の節で取り上げます。

DOM3 イベントモデル

DOM3(Document Object Model Level 3)イベントモデルは、イベントメッセージを生成および処理するための標準的な方法を提供します。このイベントモデルは、アプリケーション内のオブジェクトが互いにやり取りし、その状態を保持し、変更に応答できるように設計されています。ActionScript 3.0 イベントモデルは World Wide Web Consortium DOM Level 3 イベント仕様に従って作成され、以前のバージョンの ActionScript のイベントシステムよりも、わかりやすく効率的なメカニズムを備えています。

イベントおよびエラーイベントは、flash.events パッケージにあります。Flash Professional コンポーネントと Flexフレームワークで同じイベントモデルを使用するので、イベントシステムが Flash Platform 全体で統一されます。

表示リスト API

表示リスト、つまりアプリケーションのビジュアルエレメントを含むツリーにアクセスするための API は、ビジュアルプリミティブを操作するためのクラスで構成されます。

Sprite クラスは、軽量の構築ブロックで、ユーザーインターフェイスコンポーネントなどのビジュアルエレメントの基本クラスとして適しています。Shape クラスは、未処理のベクターシェイプを表します。これらのクラスは、 new 演算子で自然にインスタンス化され、いつでも動的に親に戻すことができます。

深度の管理は、自動化されました。オブジェクトの重ね順を指定し、管理するための新しいメソッドが用意されています。

動的なデータおよびコンテンツの処理

ActionScript 3.0 は、 アプリケーションでアセットおよびデータをロードし処理するための直観的で API 全体で一貫したメカニズムを備えています。 Loader クラスは、SWF ファイルおよびイメージアセットをロードするためのメカニズムを備え、ロードされたコンテンツに関する詳細情報にアクセスするための手段を提供します。URLLoader クラスには、データ駆動アプリケーションでテキストおよびバイナリデータをロードするための個別のメカニズムがあります。Socket クラスは、サーバーソケットに対して任意の形式でバイナリデータを読み取り、書き込む手段を提供します。

低レベルでのデータアクセス

様々な API を使用して、データに低レベルでアクセスできるようになりました。ダウンロード中のデータの場合、URLStream クラスを使用すると、データをダウンロード中に未処理のバイナリデータとしてデータにアクセスできます。ByteArray クラスを使用すると、バイナリデータの読み取り、書き込み、および操作を最適化できます。 新しいサウンド API では、SoundChannel クラスと SoundMixer クラスからサウンドを詳細に制御できます。セキュリティ API は、SWF ファイルまたはロードされたコンテンツのセキュリティ権限に関する情報を提供し、セキュリティエラーをより適切に処理できるようにします。

テキストの操作

ActionScript 3.0 には、すべてのテキスト関連 API の flash.text パッケージが含まれています。 TextLineMetrics クラスは、テキストフィールド内のテキスト行の詳細なメトリックを提供します。これは、ActionScript 2.0 の TextFormat.getTextExtent() メソッドに代わるものです。TextField クラスには、テキストフィールド内のテキスト 1 行または 1 文字に関する情報を提供する低レベルメソッドが含まれています。例えば、 getCharBoundaries() メソッドは、文字の境界ボックスを表す矩形を返します。 getCharIndexAtPoint() メソッドは、指定されたポイントにある文字のインデックスを返します。 getFirstCharInParagraph() メソッドは、段落の最初の文字のインデックスを返します。行レベルのメソッドには、特定のテキスト行の文字数を返す getLineLength() 、特定の行のテキストを返す getLineText() などがあります。Font クラスを使用すると、SWF ファイルの埋め込みフォントを管理できます。

さらに低いレベルでのテキスト制御のために、flash.text.engine パッケージのクラスは Flash Text Engine を作成します。このクラスのセットは、テキストに対する低レベルでの制御を提供し、テキストフレームワークとコンポーネントを作成するように設計されています。