Java から ActionScript3.0 に乗り換える際に不便だと思ってたことに、AS3 は関数オーバーロードができないという点があった。
しかし、その代わりに AS3 では引数のデフォルト値を明示することで、引数を省略することができる。
引数省略は狭い意味での関数オーバーロードだと言える。
ただ、その書き方が
function hoge(argv0:int, argv1:int, argv2:int = -1, argv3:int = 0, argv4:int = 2, argv5:int = 9):void {
}
みたいに、引数にいわゆる優先順位みたいなものをつけて、使用頻度の高いパラメータは前に、まれにしか活用しないパラメータは後ろへ追いやるといったことになっているため、この例だと「argv4 を活用したいけど、argv2 と argv3 はデフォルトのままでいい」といった場合に結局 argv2 も argv3 を引数を指定する必要がある。
というケースは起こり得るのだけど、実際に使っていてこうなったことは思い出す限りないので、これで事実上不便ではないのかもしれない。
むしろ AS3 を使い込んでいくと、パラメータを省略できる形で引数に指定するという書き方が結構なじんでくる。
確かに、関数オーバーロードを使うときれいにコーディングできたような気がするけど、よく考えたら混乱の元になりかねないし、実装の中身が違うんだったら関数名も分かりやすく変えたほうがいいような気がしてくるもの。
関数名とその実装が一対一に対応して、関数を呼び出す際に必要なときだけパラメータを渡す。
というのが、AS3の設計者が導き出した、自由と制約との絶妙なバランス点なのだろう。
やろうと思えばオーバーロードの方法はいくつかあるけど。
実によく考えられた言語仕様だと思う
しかし、その代わりに AS3 では引数のデフォルト値を明示することで、引数を省略することができる。
引数省略は狭い意味での関数オーバーロードだと言える。
ただ、その書き方が
function hoge(argv0:int, argv1:int, argv2:int = -1, argv3:int = 0, argv4:int = 2, argv5:int = 9):void {
}
みたいに、引数にいわゆる優先順位みたいなものをつけて、使用頻度の高いパラメータは前に、まれにしか活用しないパラメータは後ろへ追いやるといったことになっているため、この例だと「argv4 を活用したいけど、argv2 と argv3 はデフォルトのままでいい」といった場合に結局 argv2 も argv3 を引数を指定する必要がある。
というケースは起こり得るのだけど、実際に使っていてこうなったことは思い出す限りないので、これで事実上不便ではないのかもしれない。
むしろ AS3 を使い込んでいくと、パラメータを省略できる形で引数に指定するという書き方が結構なじんでくる。
確かに、関数オーバーロードを使うときれいにコーディングできたような気がするけど、よく考えたら混乱の元になりかねないし、実装の中身が違うんだったら関数名も分かりやすく変えたほうがいいような気がしてくるもの。
関数名とその実装が一対一に対応して、関数を呼び出す際に必要なときだけパラメータを渡す。
というのが、AS3の設計者が導き出した、自由と制約との絶妙なバランス点なのだろう。
やろうと思えばオーバーロードの方法はいくつかあるけど。
実によく考えられた言語仕様だと思う
初心者にとってはけっこう壁になったりするね。
俺の使用言語はVBだけど、相変わらず君のBlogは勉強になるよw
VBも楽しいから是非お試しあれ。
コントロールが簡単に作れるね!