[AS3] importの使い方が変わった [Edit]

ActionScript 3.0では、import指示子の使い方が、ActionScript 2.0と変わりました。

まず、ActionScript 2.0におけるimport指示子の使い方です。

importステートメントを記述すれば、スクリプト中でクラス名だけを指定して、クラスが参照できます。しかし、import指示子を使わなくても、完全修飾クラス名を使えば、クラスを参照することは可能です(スクリプト001)。

パッケージ内のクラスを、importステートメントも完全修飾クラス名も使わずにアクセスしようとすれば、コンパイルエラーが発生します。

スクリプト001■ActionScript 2.0におけるimport
// ActionScript 2.0クラス定義
import flash.filters.BlurFilter;
class Test20 {
 function Test20() {
  // クラス名のみでアクセス
  trace(BlurFilter); // 出力: [type Function]
  // 完全修飾クラス名で参照
  trace(flash.filters.BlurFilter); // 出力: [type Function]
  // クラス名のみでアクセス
  // trace(DropShadowFilter); // コンパイルエラー

  // 完全修飾クラス名で参照
  trace(flash.filters.DropShadowFilter); // 出力: [type Function]
 }
}

ActionScript 3.0では、パッケージに定義されたクラスを参照する際には、必ずimportステートメントを記述する必要があります。たとえ完全修飾クラス名で参照しても、importステートメントがなければReferenceErrorになります(スクリプト002)。

スクリプト002■ActionScript 3.0におけるimport
// ActionScript 3.0クラス定義
package {
 // importステートメントが必須
 // import flash.filters.BlurFilter;
 public class Test30 {
  function Test30() {
   trace(flash.filters.BlurFilter); // ReferenceError
  }
 }
}

他方で、Flash 9のタイムラインからは、importステートメントどころか、完全修飾名を使わないクラス名だけで参照ができてしまいます(スクリプト003)。

スクリプト003■Flash 9のタイムラインからクラスの参照
// フレームアクション
trace(BlurFilter); // Output: [class BlurFilter]

「これは、Flashのタイムラインには、デフォルトで必要なクラスが自動的にimportされるためです」(「import指示子」の[訳者注*1])。以前のバージョンのユーザーがFlash 9に移行して、とまどわないための対応策だと思われます。

その他の記事