Hash引数の是非考察
フロントエンド周りのプログラムを書いていると、コンストラクタやイニシャライズメソッドの引数がHashやJSON形式オブジェクト一本勝負パターンをよく目にする。
$("#dialog-start").dialog({ title: '条件を設定・選択してください', height: 670, width: 900, resizable: false, modal: true, draggable: false, close: function () { document.location.href = 'series.php'; } });
前々から、この方法に関する是非が気になっていたのだけれど、調べてみるとどうもこの件に関するアンチパターン、ベストプラクティス、デザインパターンのようなものが見当たらない。
個人の見解は出てくるけど。と言うわけで自分なりに考察してみた。
ruby - Passing hashes instead of method parameters - Stack Overflow
Hash引数のメリット
(1) 引数の数、組み合わせが多い場合
- 幾つもメソッドを定義しなくて良い
- 呼び出す際に引数の順番を気にしなくて良い
例えば、C#のSystem.IO.StreamReaderはコンストラクタが11個あったりする。
StreamReader クラス (System.IO)
(2) オプションが多い場合
省略する引数へのデフォルト値の指定が不要
(3) 可読性
- 関数・メソッドの定義を見なくても、値が何を意味するのかが明確
- 省略する引数へのデフォルト値の指定が不要
(4) 変更に強い
引数を増やす必要があった場合でも、呼び出し側に影響がない
(5) コーディング量の削減
引数用のクラスの定義、それにまつわるExceptionクラスの定義などを行わなくて良い
(※) 行わなくて良いことの是非は別として