設定オブジェクトパターンをクラスのコンストラクタに適用する
関数の引数が多くなると、パラメータの順序を覚えたり、オプションパラメータの扱いづらくなります。
/* before */ // 定義 function test(arg1, arg2, opt_arg3, opt_arg4, opt_arg5) { ... } // 実行 test(a, b, c, d);
そこで引数に辞書オブジェクトを与えて、パラメータを分かりやすく扱えるようにするのが設定オブジェクトです。
/* after (設定オブジェクト) */ // 定義 function test(conf) { ... } // 実行 test({'arg1': a, 'arg2': b, 'arg3': c, 'arg4': d});
詳細:JavaScriptパターン -優れたアプリケーションのための作法- (P.81)
Closure Library でクラスを定義するとき、設定オブジェクトを用いると以下のような形式が考えられます。
goog.provide('model.Test'); /** @constructor */ model.Test = function (conf) { // required this.arg1 = conf.arg1; // required this.arg2 = conf.arg2; // required this.arg3 = conf.arg3; // option if (goog.isDefAndNotNull(conf.arg4)) { this.arg4 = conf.arg4; } else { this.arg4 = 'default value'; } // option if (goog.isDefAndNotNull(conf.arg5)) { this.arg5 = conf.arg5; } else { this.arg5 = 'default value'; } } // 実行 var test = new model.Test({'arg1': a, 'arg2': b, 'arg3': c, 'arg4': d});
辞書オブジェクト conf をクラス側で提供することも考えましたが、引数を毎回コピーするのは不自然だと感じ、呼び出し側で conf を作成するようにしました。
必須引数を代入した後は、goog.asserts.assert(this.arg1) を挟んだほうが安全かもしれません。
Google API Expertが解説する Closure Libraryプログラミングガイド
- 作者: 伊藤千光
- 出版社/メーカー: インプレス
- 発売日: 2010/12/10
- メディア: 単行本(ソフトカバー)
- 購入: 4人 クリック: 183回
- この商品を含むブログ (15件) を見る