[解決済み] 複数引数 vs. オプションオブジェクト
2022-04-16 23:15:27
質問
複数の引数を持つJavaScriptの関数を作るとき、私はいつもこの選択に直面します。
例えば、nodeListを配列にマップする関数を書いています。
function map(nodeList, callback, thisObject, fromIndex, toIndex){
...
}
代わりにこれを使うこともできる。
function map(options){
...
}
ここで、options はオブジェクトです。
options={
nodeList:...,
callback:...,
thisObject:...,
fromIndex:...,
toIndex:...
}
どちらが推奨される方法なのでしょうか?また、どのような場合に一方を使うか、もう一方を使うかのガイドラインはありますか?
[私の場合、引数のリストを使いたくなった理由のひとつは、JavaScriptに組み込まれているarray.mapメソッドと一致する動作をさせるためでした。
解決方法は?
他の多くの人と同じように、私もよく
options object
を関数に渡すのは、長いパラメータのリストを渡す代わりに、正確なコンテキストに依存します。
私はコードの読みやすさをリトマス試験紙として使っています。
例えば、こんな関数の呼び出しがあったとします。
checkStringLength(inputStr, 10);
このままでもかなり読みやすいコードだと思いますし、個別のパラメータを渡すのも丁度良いですね。
一方、このように呼び出しがある関数もあります。
initiateTransferProtocol("http", false, 150, 90, null, true, 18);
ある程度調べないと全く読めません。 一方、このコードはよく読めます。
initiateTransferProtocol({
"protocol": "http",
"sync": false,
"delayBetweenRetries": 150,
"randomVarianceBetweenRetries": 90,
"retryCallback": null,
"log": true,
"maxRetries": 18
});
科学というより芸術ですが、経験則を挙げるとすれば。
以下の場合、オプションパラメータを使用します。
- パラメータが4つ以上ある場合
- パラメータのいずれかがオプションである
- どのようなパラメータを取るのか、関数を調べる必要があったことがある方
- もし、誰かが "ARRRRG!" と叫びながらあなたの首を絞めようとしたら。
関連
-
vueディレクティブv-bindの使用と注意点
-
[解決済み】「X-Frame-Options」を「SAMEORIGIN」に設定したため、フレームでの表示を拒否された。
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Bashでコマンドライン引数を解析するには?
-
[解決済み】未定義のオブジェクトプロパティを検出する
-
[解決済み】JavaScriptのオブジェクトの長さ
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vue3レスポンシブ対応のためのsetup+ref+reactive
-
JSアレイループと効率解析の比較
-
JavaScriptにおけるマクロタスクとミクロタスクの詳細
-
Vueはランニングライト形式のテキストを水平方向にスクロールする機能を実装している
-
jQueryのコピーオブジェクトの説明
-
JavaScriptの配列共通メソッド解説
-
Vueのイベント処理とイベントモディファイアの解説
-
[解決済み】ローカルファイルを開くことができません - Chrome: ローカルリソースの読み込みが許可されていない
-
[解決済み】エラー。Ionic使用中にモジュール '../lib/utils/unsupported.js' が見つかりませんでした。
-
Uncaught TypeError: null のプロパティ 'offsetHeight' を読み取れませんでした。