AS3の*型の問題点とその代替案 〜その3.解決策〜

解決策

オブジェクトリテラルのように書けて、静的型チェックもしたい。
そんな方法があるだろうか。


実は、クラスにちょっとした工夫を施すことによって解決できる。

//---Tweener.as---
class Tweener{
	public function addTween(obj:DisplayObject,args:TweenArgs):void{
		//code
	}
}

//---TweenArgs.as---
class TweenerArgs {
	public function $x(value:Number):TweenerArgs { x = value; return this; }
	public function $y(value:Number):TweenerArgs { y = value; return this; }
	public function $time(value:Number):TweenerArgs { time = value; return this; }	
	public function $alpha(value:Number):TweenerArgs { alpha = value; return this; }
	public function $delay(value:Number):TweenerArgs { delay = value;return this; }
	public var x:Number = 0;
	public var y:Number = 0;
	public var alpha:Number = 1;
	public var time:Number = 0;
	public var delay:Number=0;
}
//---呼び出し---
addTweener(obj,new TweenerArgs().$x(100).$y(100).$time(5));

$のついたメソッドは、引数をプロパティに代入して、thisを返すのもだ。
これをメソッドチェーンで呼び出すことによって、連続して変数の代入をしている。
これなら、余計な一時変数を作る必要も無いし、オブジェクトリテラルと比べても、そこまで長くは無い。
しかも静的型チェックもしてくる!


ライブラリ提供側にとっては、そういったクラスを作らないといけないというコストが掛かるが、
使う側にとっては、静的型付けの利点が生かせる。


完璧だ!
オブジェクトリテラルを使いたいと思ったら、まずこの方法で検討してみることをオススメするよ!