サイトトップ

Director Flash 書籍 業務内容 プロフィール

Macromedia Flash非公式テクニカルノート

import指示子

ID: FN0607003 Product: Flash

Platform: All
Version: Flash 9 and above

シンタックス
import packageName.className
import packageName.*

パラメータ
packageName:* - 別個のクラスファイルで定義されたパッケージ名。
className:Class - 別個のクラスファイルで定義されたクラス名。

説明
外部に定義されたクラスやパッケージを、コード中で利用可能にします。たとえば、flash.display.Spriteクラスをスクリプト中で使用したいときは、そのクラスをインポートしなければなりません[*1]。この要件は、以前のバージョンのActionScriptとは異なります。以前のバージョンでは、import指示子(ディレクティブとも呼びます)は使用しないことも可能でした。

import指示子を使用した後は、完全なクラス名を使ってパッケージ名まで含めることも、クラス名だけを用いることもできます。

import flash.display.Sprite;

// クラス名のみ
var mySprite:Sprite = new Sprite();

// 完全なクラス名
var mySprite:flash.display.Sprite = new flash.display.Sprite();

パッケージ内に参照したい複数のクラスがある場合には、つぎの例のようにそれらすべてのクラスを1ステートメントでインポートすることができます[*2]

import flash.display.*;

import指示子は、指定したパッケージのトップレベルに存在するクラスや関数、変数のみをインポートすることができます。パッケージ内に入れ子になったパッケージは、別途明示的にインポートしなければなりません。

クラスをインポートしながらスクリプトで使用しなかった場合、そのクラスはSWFファイルの中には書出されません。つまり、大きなパッケージをインポートしても、SWFファイルのサイズは気にせずに済みます。クラスに関わるバイトコードがSWFファイルに含まれるのは、そのクラスが実際に使われたときだけだからです。不要なクラスをインポートした場合にひとつ問題なのは、名前の重複する可能性が増えることです。

なお、import宣言をフレームアクションで行った場合、そのフレームだけでなく、タイムライン全体に対して効果が及びます[*3]

[訳者注*1] たとえば、ActionScript 3.0クラス定義で、以下のようにimportステートメントを記述せず、完全修飾名によりクラスにアクセスすると、ReferenceErrorが発生します。

// ActionScript 3.0クラス定義ファイル: Test.as
package {
  // import flash.display.Sprite
  public class Test {
    function Test() {
      trace(flash.display.Sprite);   // ReferenceError
    }
  }
}

他方で、Flashムービー内からimportステートメントも完全なクラス名も使用せず、単なるクラス名のみで参照しても、とくにエラーは生じません。

// Flashムービー(SWF)
// フレームアクション
trace(Sprite);   // Output: [class Sprite]

これは、Flashのタイムラインには、デフォルトで必要なクラスが自動的にimportされるためです。インポートされるクラスは、Adobe Flash CS3アプリケーションフォルダ内のConfigration/ActionScript 3.0/implicitImports.xmlに記述されています。

図■implicitImports.xmlの内容
implicitImports.xml

[訳者注*2] akihiro kamijo「package」によれば、"*"を使うより「一つ一つ指定した方が性能的には良い結果になるよう」だということです。

[訳者注*3] 原文は「import指示子は、それを呼出した現行のスクリプト(フレームまたはオブジェクト)に対してのみ適用されます」("The import directive applies only to the current script (frame or object) in which it's called.")としています。しかし、これはActionScript 2.0についての説明です。ActionScript 3.0では、import宣言のほか、変数のvar宣言や関数のfunction定義は、タイムライン全体に対して初期化が行われます。

Player
ActionScript 3.0/Flash Player 9以降。

出典
[ActionScript 3.0 Language Reference] > [Statements, Keywords & Directives] > [import directive]

_____

作成者: 野中文雄
更新日: 2008年3月12日 Flash SC3のドキュメントを確認のうえ、細部を修正および補足。
作成日: 2006年7月15日


Copyright © 2001-2008 Fumio Nonaka.  All rights reserved.