この記事のURL

http://www.dango-itimi.com/blog/archives/2013/001175.html


FLASH tips Haxe: 条件付きコンパイル記述を型宣言部分に利用

前回の記事を書いておきながら、条件付きコンパイル記述を行わないと厳しい箇所が出てきたため 部分的に利用していく事に。今後まだまだ揺れそうですが一つの方針としてメモしておきます。

 前回の記事) Haxe: CreateJS と Flash API 共通する箇所は interface を作成して記述を簡略化
 http://www.dango-itimi.com/blog/archives/2013/001174.html

条件付きコンパイル記述における懸念点の一つとして、以下がありました。

・条件付き記述で囲まれた行はリファクタリングの対象とはならない

例として、以下の様なソースコードを挙げました。

package shooting.enemy;

#if flash
import flash.display.DisplayObjectContainer;

#elseif js
import createjs.easeljs.Container;
#end

class Enemy {

	private var view:View;

	public function new(
		#if js
		layer:Container

		#elseif flash
		layer:DisplayObjectContainer

		#end
	){
		view = new View();
		layer.addChild(view);
	}
}

これを以下のように変更する事にします。

package shooting.enemy;

#if flash
import flash.display.DisplayObjectContainer;

#elseif js
import createjs.easeljs.Container;
#end

class Enemy {

	private var view:View;

	public function new(
		layer:#if js Container #elseif flash DisplayObjectContainer #end
	){
		view = new View();
		layer.addChild(view);
	}
}

このようにすることで、layer 変数はリファクタリングの対象となり、Rename での名前変更対象ともなります。

問題点としましては、ソースコードが見にくいという点と、エディタ IntelliJ IDEA 上でエラー表示がされてしまう、という点が挙げられます。上記例ではエラー表示はなされませんが、以下の様な記述ではエラー表示がなされます。

・フィールド変数での記述

private var layer:#if js Container #elseif flash DisplayObjectContainer #end;

・メソッド引数での Class 型指定

public function new(viewClass:Class<#if js Container #elseif flash DisplayObjectContainer #end>){
}

エディタ上でエラー表示はされてしまいますが、コンパイルは通ります。

[ FLASH ] [ tips ] 投稿者 siratama : 2013年04月09日 10:39

トラックバック

http://www.dango-itimi.com/blog/mt-tb.cgi/1135

コメント

以下コメントを書き込むだけでは、管理人には通知が行われません。通知を行いたい場合、管理人の書き込みに「返信」を押してコメントをしていただくか、あるいは Google+, Twitter へご連絡ください。




[EDIT]