« flash製MMO RPG、 Dofus | main | 近況報告 »

2005年09月06日

ActionScriptで関数のオーバーロードを実装する

勉強の為にAs2Libを読んでて見つけたのですが、actionScriptで関数のオーバーロードを実現するフレームワークなんて存在するんですね。ビックリビックリ。しかもこれ、そのままJavaScriptに移植できるわ。

オーバーロードというのは、1つの関数を

function hoge( val1:String ){}
funcition hoge( val1:Number){}
funcition hoge( val1:Object, val2:Object){}

というように、いくつもの引数のスタイルで、渡されたパラメータによって実行する関数を変更するという機能です。Javaとかではお馴染みでスゴイ便利なんだけど、ASやJSでは元々実装されてないのです。


が、なんとAs2Libフレームワークの、org.as2lib.env.overload.Overloadクラスを使えば、ActionScriptでもオーバーロードができちゃうらしいのです。

org.as2lib.env.overload.Overload

function hoge(){
var o:Overload = new Overload(this);
//overloadで使う処理を登録。
o.addHandler([String], hogeType1);
o.addHandler([Number], hogeType2);
o.addHandler([Object, Object], hogeType3);
return o.foward(arguments);
}

private function hogeType1(str:String){
}

private function hogeType2(num:Number){
}

private function hogeType3(obj:Object, obj:Object){
}

こんな感じ。
どうやらOverloadクラスは、関数hoge内でプロキシとなって、適切な型のprivate関数に呼び出しを委譲するみたい。

ただし、あくまでオーバーロードの擬似実装だから、いくつか欠点もあります。


  • 複数のオーバーロードの戻り値が異なる場合は、型指定をObject型にしかできない

  • コンパイル時に型チェックが行われない(実行時に例外を吐くように設計されてる)

  • 実行速度が微妙に落ちる

これは超便利っぽい。As2Libは強固な分だけコンパイル時間がガタ落ちするので、自分ライブラリにも同じAPIでこういうの実装してもいいかもしんない。

しっかし、コリン・ムークとかサイモン・ワッカーとかGスキナーとかって人達は頭よすぎるね。何食べたらあんなふうになれるんだろう。

投稿者 Taka : 2005年09月06日 07:54

book

dotfla.gif

bookmark

はてなブックマークに追加

del.icio.usに追加

trackbacks

this entry's trackback URL:
http://www.fladdict.net/cgi-bin/mt3/mt-tb.cgi/298

このリストは、次のエントリーを参照しています: ActionScriptで関数のオーバーロードを実装する:

» http://emergencycashadvance-uFPI.blogspot.com from http://emergencycashadvance-uFPI.blogspot.com
http://creditmortgagepoorsecond-dvIp.blogspot.com [read more]

トラックバック時刻: 2006年03月04日 18:06

» Pizza Review from Pizza Review
Pizza Review [read more]

トラックバック時刻: 2006年03月17日 07:34

» live cricket from cricket scores
live cricket [read more]

トラックバック時刻: 2006年03月21日 18:55

» accident lawyer from lawyer information
accident lawyer [read more]

トラックバック時刻: 2006年03月28日 02:29

comment

As2libボクも何箇所か除いてみました.
http://blog.graffiti-web.org/archives/2005/06/touching_as2lib.html

reflectionパッケージ
loggingパッケージ
eventパッケージのdistibutor

この辺の実装が面白かった記憶があります.
もう忘れちゃいましたが…(汗

by nao : 2005年09月07日 02:23

lose do forecast - that is all that game is capable of: http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=MIGR-51398 , international, white, faithful nothing comparative to beautiful

by Patrick Wilson : 2006年03月28日 12:13

コメントしてください




保存しますか?