AS3 では、コンパイル時に条件を指定してコンパイル結果を変えることができます。例えば、コードの一部を、条件に応じてコンパイル対象から外したり、ターゲットごとにクラス定義を切り替えたり、という使い方が可能です。
条件を指定するコンパイル定数は、下の形式で記述します。
CONFIG::定数名
CONFIG は条件を指定する定数用の名前空間です。定数名の箇所は予約語を除き任意の名前を使用できます。
CONFIG 名前空間は、オーサリング環境がデフォルトで使用します。名前が被るのを避けるために、独自の名前空間を宣言したければ、以下のようなコードを AS のコード内に記述します。
config namespace MY_CONFIG; // MY_CONFIG は好きな名前に置き換えて
これで、以下のような定数を指定できるようになります。
MY_CONFIG::debug
コンパイル定数が true の時のみ、後続のブロックがコンパイルされます。例えば、下の例では、MY_CONFIG::debug の値が true であれば、trace 文がコンパイルの対象となります。
MY_CONFIG::debug { trace("MY_CONFIG::debug == true"); }
コンパイル定数の後には、クラス定義や関数定義、それから変数宣言を記述することもできます。この場合も、定数の値が true の時のみ、後続のクラスや関数が定義されます。下の例では 2 種類のクラス定義を、変数によって切り替えています。
package { MY_CONFIG::iphone public class MyButton extends Button { // MY_CONFIG::iphone == true ではこのクラス定義が有効になる } MY_CONFIG::android public class MyButton extends Button { // MY_CONFIG::android == true ではこのクラス定義が有効になる } }
コンパイル定数の設定
Flash Professional の場合、「ActionScript 3.0 の詳細設定」 パネルからコンパイル定数の設定を行います。パネル内の 「条件付きコンパイル定数」 のタブをクリックすると、入力用の画面が表示されます。「+」 アイコンをクリックして、新しい定数の名前と値を入力したら、「OK」を押して終了します。
Flash Builder または Flex SDK の場合、コンパイルオプションとして定数を指定します。Flash Builder を使う場合は、プロジェクトのプロパティパネルから 「ActionScript コンパイラー」 のタブを選び、「追加コンパイル引数」 の欄に、以下のような指定を追加します。
-define=MY_CONFIG::debug,true
定数の設定を置き換えるのではなく、追加する場合は += 演算子を使います。
-define+=MY_CONFIG::debug,true -define+=MY_CONFIG::release,false
flex-config.xml ファイル内に定数を記述することもできます。上の例の場合であれば、下のような設定になります。
<compiler> <define append="true"> <name>MY_CONFIG::debug</name> <value>true</value> </define> <define append="true"> <name>MY_CONFIG::release</name> <value>false</value> </define> </compiler>
append="true" は += 演算子の意味になります。flex-config.xml ファイルとコンパイルオプションの指定が重なると、コンパイルオプションが優先されます。
もちろん Ant も使えます。
<mxmlc ... > <define name="MY_CONFIG::debug" value="true"/> <define name="MY_CONFIG::release" value="false"/> </mxmlc>
次回に続きます。