「パラメーターのプロパティ渡し」でプログラムを読みやすくする、というアイデアはどうだろう
2007.05.30
先日の金魚シミュレーターのソースを整理していて思ったのだが、コンストラクターにごちゃごちゃとパラメーターをたくさん渡すとものすごくプログラムが読みににくくなる。そこでフと思いついたことがあるので書いてみる。
例えばFishというクラスがあったとしよう(ちなみに、これはActionScript3.0)。
class Fish extends MovieClip {
public function Fish(speed:int, direction:int, x:int, y:int, minDistance:int, maxInfluence:int) {
this.x = x;
this.y = y;
....
}
}
コンストラクター側はこれでも問題はないのだが、呼び出す方がこんな感じになってしまう。
var f:Fish = new Fish(2, 180, 20, 20, 16, 40);
C++とかJavaで良く見るプログラミングスタイルだが、こうやってひたすら数字だけが並んでいるとやたらと読みにくい。三日後に見たらどのパラメーターが何なのかが思い出せなくて、コンストラクターのソースコードを参照せねばならない。
そこで、ActionScriptにもJavaScriptのように自由にプロパティを追加できるObjectというクラスがあることを利用して、これらのパラメーターを一つのオブジェクトのプロパティとして渡すように変更してみた。
class Fish extends MovieClip {
public function Fish(param:Object) {
this.x = param.x;
this.y = param.y;
....
}
}
すると呼び出し側はこうなる。
var f:Fish = new Fish({speed:2, direction:180, x:20, y:20, minDistance:16, maxInfluence:40});
ずっと読みやすくなったように私には思える(ちなみに、これはActionScript版のJSONである)。
もちろん、実行効率は悪くなるし、プロパティのスペルを書き間違えた時にコンパイラーが警告してくれない、などの欠点もあるが、それほど実行効率が重要ではなくて(=富豪プログラミング)、呼び出し側のプログラムの読みやすさの方が重要な場合には、こんなプログラミング・スタイルも悪くないと思ったしだいである。