AS3の*型の問題点とその代替案 〜その3.解決策〜
目次
- その1.*型は問題点が多い
- その2.オブジェクトリテラルの長所
- その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を返すのもだ。
これをメソッドチェーンで呼び出すことによって、連続して変数の代入をしている。
これなら、余計な一時変数を作る必要も無いし、オブジェクトリテラルと比べても、そこまで長くは無い。
しかも静的型チェックもしてくる!
ライブラリ提供側にとっては、そういったクラスを作らないといけないというコストが掛かるが、
使う側にとっては、静的型付けの利点が生かせる。
完璧だ!
オブジェクトリテラルを使いたいと思ったら、まずこの方法で検討してみることをオススメするよ!