2008年5月アーカイブ

FlashPlayer10が世間を賑わせてますが、僕はまだインストールしてないです。
3Dに対応したけど、世の中のFlashコンテンツが3Dだらけになったら嫌だなあ。とかぼやきつつ
もうしばらく静観してようかなと思ってます。
いろんな人が新機能についてノウハウを記事にされるのを読んでからにしようかと。
Flexも持ってないし。
まったく人任せな。

ところで、Vectorクラスなんですけども、
これって中身を型指定できるってことなんですが
var a:Array = new Vector.<String>();
みたいなことって出来るんでしょうか。

Vectorクラス自体の実装を一見しても、Array を継承してるようでもないので、
もしかしてArrayとはまったく別物なのかな? と。

個人的な要望としては
var a:String[] = ["a","b","c"];
みたいな方が都合良さげな気がするんですが。

もしかして
var v:Vector.<String> = ["a","b","c"];
とかもできないんだろうか。

さすがに
function test( arg:Vector.<String> ): Vector.<String>
{
   return arg;
}
ってことは出来るんだろうけど。

でも、やっぱり Vector が Array として認識できないと何か嫌。
認識できなくていいなら、Proxy使ってこんな実装でいいんじゃないかと。
これなら今のままでも使えるし。

まあ、Arrayより高速に処理できるってことはいいんだろうけど。


ついでに、上記の「こんな実装」を使った場合は以下のような感じ。
ArrayOf
import flash.geom.Point;

var points:ArrayOf = new ArrayOf(Point);
points[0] = new Point(1,1);
points[1] = new Point(2,2);
points.push( new Point(3,3), new Point(4,4) );

trace(points); //(x=1, y=1),(x=2, y=2),(x=3, y=3),(x=4, y=4)

var a:Array = points.toArray();
trace(a); //(x=1, y=1),(x=2, y=2),(x=3, y=3),(x=4, y=4)

var points2:ArrayOf = new ArrayOf(Point);
points2.push(new Point(5,5), new Point(6,6));

var points3:ArrayOf = points.concat(points2);


trace( points3 ); //(x=1, y=1),(x=2, y=2),(x=3, y=3),(x=4, y=4),(x=5, y=5),(x=6, y=6)
trace(points3[4]);          // (x=5, y=5)
trace(points3.shift());     // (x=1, y=1)
trace(points3.pop());       // (x=6, y=6)
trace(points3.splice(0,2)); // (x=2, y=2),(x=3, y=3)

test(points); // ok

points[0] = 1; // ArgumentError: Point と関連しない型の値は格納できません。

function test(arg:ArrayOf):void
{
    if( arg.type != Point ) throw new ArgumentError("エラー");
    trace("ok");
}
Spark Project の Utils ライブラリにコミットしました。
http://www.libspark.org/browser/as3/Utils/src/org/libspark/utils

至らない点は多々あると思うので、使い勝手のいいように変更してもらえればいいと思います。
もちろん何か言っていただければ可能な限り対応します。

コミットしたのは以下のファイル。

ArrayUtil(追記)
BitmapUtil
ColorUtil
DateUtil(追記)
MathUtil(追記)
StringUtil(追記)

(追記)は元々あったものに手を加えました。


いろんなライブラリを使ってると「ArrayUtil」とか「ColorUtil」とか
同じ名前のクラスが 3 つも 4 つもある状態になってしまったりするので
(as3corelibとか、popforgeとか、progressionとか。とかとか。)
そういうのんに含まれてるものも、こっちに書き写してしまえば
使うとき楽でいいんだけどなあ。と思う今日この頃です。
(写したら同じのが増えちゃうんですけども。。。)


ちなみに
BeInteractive!さんが「「これコミットして大丈夫なのかな...」と考える前にコミットして欲しい」って記事を
書いてくれていて、これは小心者の僕としてはコミットへの後押しになりました。
記事を書いておられるのがコメントもらった次の日だっていうのに、気づいたのが今日という僕ですが。

こっそりと感謝です。


追記::(2008.05.16)
GeomUtil
ObjectUtil
上記2点追加しました。