Возможно, я немного опоздал на вечеринку с этим ответом, но я искал мнения других разработчиков по этой самой теме и наткнулся на эту тему.
Я очень не согласен с большинством респондентов и придерживаюсь подхода «множественных аргументов». Моим главным аргументом является то, что он препятствует другим анти-шаблонам, таким как «мутирование и возврат объекта param» или «передача того же объекта param другим функциям». Я работал над базами кода, которые широко использовали этот анти-шаблон, и отладка кода, который делает это быстро, становится невозможной. Я думаю, что это очень эмпирическое правило для Javascript, поскольку Javascript не является строго типизированным и допускает такие произвольно структурированные объекты.
Мое личное мнение состоит в том, что разработчики должны быть явными при вызове функций, избегать передачи избыточных данных и избегать модификаций по ссылке. Дело не в том, что эти шаблоны не позволяют писать краткий, правильный код. Я просто чувствую, что вашему проекту намного легче впасть в плохую практику разработки.
Рассмотрим следующий ужасный код:
function main() {
const x = foo({
param1: "something",
param2: "something else",
param3: "more variables"
});
return x;
}
function foo(params) {
params.param1 = "Something new";
bar(params);
return params;
}
function bar(params) {
params.param2 = "Something else entirely";
const y = baz(params);
return params.param2;
}
function baz(params) {
params.params3 = "Changed my mind";
return params;
}
Этот тип требует не только более явной документации для определения намерения, но также оставляет место для неопределенных ошибок. Что делать, если разработчик изменяет param1
вbar()
? Как вы думаете, сколько времени потребуется, чтобы просмотреть кодовую базу достаточного размера, чтобы это уловить? Следует признать, что этот пример немного неискренен, поскольку предполагает, что к этому моменту разработчики уже применили несколько анти-паттернов. Но это показывает, как передача объектов, содержащих параметры, дает больше места для ошибок и двусмысленности, требуя большей степени добросовестности и соблюдения правильности const.
Просто мои два цента по этому вопросу!