条件付きコンパイル

(サンプル一覧を表示する)

FlashDevelop を使って、条件付きコンパイルのテストをしてみました。

このサンプルは、trace() を使ってデバッグウインドウに
内容を表示しているので Flash の実行画面はありません。

コンパイルオプションを使用することで、デバッグ時のみ使用できる機能等の
有効・無効を切り替えることができます。

普通の定数値の比較でも同じようなことができますが、
コンパイル時にチェックしないので、オプションを無効にした場合でも
実行時にそのまま if 文を通過する時の負荷がかかってしまいます。

こういったケースは、コンパイルオプションを使用するように切り替えることで
オプション無効時に指定したブロックが含まれないようになり、
実行時にもかかってしまう負荷を無くすことができます。

コンパイル時に使用する定数の設定の仕方

  • まず、FlashDevelop の右ペインの "Project" の画面から、
    プロジェクト名の項目を選び、右クリックしてプロパティを開きます。

    条件付きコンパイルの設定 1
  • プロパティの画面が開いたら、タブ一覧から "Compiler Options" を選び、
    "Additional Compiler Options" という項目の右端にある、 "・・・" となっているボタンを押します。

    条件付きコンパイルの設定 2
  • 文字列コレクションエディタというのが開くので、ここに

    「 -define=CONFIG::debugging,true 」

    と入力することで、コンパイル時定数を有効にすることができます。
    コンパイル時定数を無効にする時は

    「 -define=CONFIG::debugging,false 」

    と入力します。
    また、定数値を増やす時は、 2 行目に同じようなフォーマットで値を指定します。
    (-define=[Namespace]::[定数],[値])


    条件付きコンパイルの設定 3

ソースコード

package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	
	/**
	 * 条件付きコンパイルのテスト
	 * @author Hikipuro
	 */
	public class Main extends Sprite 
	{
		/**
		 * デバッグ時のみ使用可能な変数
		 */
		CONFIG::debugging
		private var testString:String = "Test String";
	
		/**
		 * コンストラクタ
		 */
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		/**
		 * 初期化メソッド
		 * @param	e
		 */
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			
			trace("start");
			
			// 
			// デバッグ時のみこのブロックがコンパイルされる
			// CONFIG::debugging を使用せずに testFunction() を外に出すと、
			// コンパイル時に
			// 
			// Error: 未定義である可能性が高いメソッド testFunction の呼び出しです。
			// 
			// というエラーが出る
			// 
			CONFIG::debugging {
				testFunction();
			}
			
			trace("end");
		}
		
		/**
		 * デバッグ時のみ使用可能なメソッド
		 */
		CONFIG::debugging
		private function testFunction():void 
		{
			trace(testString);
		}
	}
	
}
		

出力結果

外部リンク