サイトトップ

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

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

importディレクティブ(指示子)

ID: FN1006001 Platform: All Version: CS3/ActionScript 3.0 Runtime: Flash Player 9/AIR 1.0

importディレクティブ
文法 import packageName.className
import packageName.*
パラメータ packageName:* - 使用するクラスの定義されたパッケージ名。
className:Class - パッケージに定義された使用するクラス名。

説明
ActionScript 3.0の多くのクラスは、パッケージに定義されています[*1]。たとえば、DisplayObjectクラスは、パッケージflash.displayに属します(図001)。パッケージによりクラスが分類でき、また名前の競合が防げます[*2]

図001■[ActionScript 3.0リファレンスガイド]の[DisplayObject]クラスの解説冒頭
implicitImports.xml

パッケージに定義されたクラスを使うには、クラス名の前にパッケージ名を添えてimportディレクティブ(指示子)で宣言しなければなりません[*3]import宣言したクラスは、スクリプト中でクラス名のみの記述により参照できます。なお、パッケージ名が添えられたいわばクラスのフルネームを「完全修飾クラス名」または「完全限定クラス名」といいます。

import パッケージ.クラス

たとえば、Flash Professional CS5に備わったTLFテキストを動的に生成してタイムラインに配置し、テキストとして"test"を設定したいとしましょう。TLFTextFieldクラスのパッケージはfl.textです。この場合つぎのように、完全修飾クラス名fl.text.TLFTextFieldをimport宣言します。

import fl.text.TLFTextField;

var my_txt:TLFTextField = new TLFTextField();
addChild(my_txt);
my_txt.text = "test";

同じパッケージに属する複数のクラスを使う場合には、ワイルドカード*を用いてその中のすべてのクラスが指定できます。ただし、指定されるのはそのパッケージ直下のクラスだけで、パッケージ内のサブパッケージは含まれません。たとえば、つぎのimport宣言により、fl.transitionsパッケージのクラスはすべて呼出せます。けれども、fl.transitions.easingパッケージのクラスを用いるには、別に宣言が必要です。

import fl.transitions.*;

import宣言したクラスを使わなければ、そのクラスはSWFファイルには書出されません。つまり、宣言にワイルドカード*を用いても、要らないクラスのデータがSWFファイルのサイズを増やすことはありません。ただし、同じ名前のクラスが競合しやすくなります。やむを得ず名前が競合してしまったときは、クラスを完全修飾名で参照します。できれば、必要なクラスのみをimport宣言する方が安心でしょう[*4]

Flashムービー(FLA)ファイルに書くフレームアクションについて、つけ加えることがあります。第1に、フレームアクションではimport宣言をしなくても、多くのActionScript 3.0定義済みクラスが使えます。これは、Flashアプリケーションが基本的なクラスを自動的にimportするためです[*5]。第2に、フレームアクションのimport宣言は、そのフレームだけでなく、タイムライン(MovieClipインスタンス)全体に対して効果が及びます。

[*1] ActionScript 3.0に定義されているパッケージについては、[ActionScript 3.0リファレンスガイド]の[すべてのパッケージ]をご参照ください。

[*2] 同じくパッケージという仕組みをもつJavaでは、コードが共用・公開しやすいように一意のパッケージ名を用いるよう推奨されています。具体的には、開発するコードのパッケージは、ドメイン名を逆順にした名前で始めます(JavaA2Z「パッケージ名」、片っ端から忘れていけばいいじゃない。「Javaでドメイン名から一意なパッケージ名を生成するルールのまとめ。」参照)。

ActionScript 3.0でも、公開されるライブラリやフレームワークの多くはこれにしたがっています。たとえば、Papervision3Dは、パッケージの頭がorg.papervision3dになっています(Papervision3Dについては、F-site「[papervision3d]*Step0*入門編-HelloWorld-」やClockMaker Blog「フレームアクションで覚える Papervision3D チュートリアル Vol.01」参照)。

[*3] ActionScript 2.0は、import宣言はしなくても、完全修飾クラス名を記述すればクラスが参照できました。Javaのimportの仕様も同じようです(Wikipedia「パッケージ (Java)」の「パッケージ使用」参照)。しかし、ActionScript 3.0では、完全修飾クラス名を用いる場合でも必ずimport宣言はしなければなりません。

なお、import宣言する必要があるのは、パッケージに属するクラスです。トップレベルのクラスや関数を使うときに、宣言は要りません。

[*4] [ActionScript 3.0の学習]の[パッケージと名前空間]の「パッケージの読み込み」には、つぎのように述べられています。

一般的に、importステートメントは可能な限り明確にします。samplesパッケージからSampleCodeクラスだけを使用する場合、SampleCodeクラスが属するパッケージ全体ではなく、このクラスだけを読み込むようにしてください。パッケージ全体の読み込みにより、予期しない名前の競合が発生する場合があります。

また、akihiro kamijo「package」によれば、ワイルドカード*を使うより「一つ一つ指定した方が性能的には良い結果になるよう」だということです。

[*5] 自動的にimportされるクラスは、おもにflashパッケージです。Flashアプリケーションフォルダ内に、XMLファイルで指定されます。Flash Professional CS5であれば、Common/Configration/ActionScript 3.0/implicitImports.xmlに記述されています(図002)。

図002■implicitImports.xmlの内容
implicitImports.xml

参考
[ActionScript 3.0リファレンスガイド] > [ステートメント、キーワード、ディレクティブ] > [importディレクティブ]

関連項目
[パッケージと名前空間]、[ActionScriptパブリッシュ設定]の「ActionScript ファイルの場所の設定」。

_____

作成者: 野中文雄
作成日: 2010年6月1日 FN0607003「import指示子」を全面改訂。


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