Mogę się trochę spóźnić na imprezę z tą odpowiedzią, ale szukałem opinii innych programistów na ten temat i trafiłem na ten wątek.
Zdecydowanie nie zgadzam się z większością respondentów i opowiadam się za podejściem „wielu argumentów”. Moim głównym argumentem jest to, że zniechęca to innych anty-wzorców, takich jak „mutowanie i zwracanie obiektu param” lub „przekazywanie tego samego obiektu param innym funkcjom”. Pracowałem w bazach kodu, które w znacznym stopniu nadużywały tego anty-wzorca, a debugowanie kodu, który to robi, szybko staje się niemożliwe. Myślę, że jest to bardzo praktyczna reguła specyficzna dla JavaScript, ponieważ Javascript nie jest silnie wpisany na maszynie i pozwala na takie dowolnie zbudowane obiekty.
Osobiście uważam, że programiści powinni być jawni podczas wywoływania funkcji, unikać przekazywania nadmiarowych danych i unikać modyfikacji przez odniesienie. Nie chodzi o to, że ten wzorzec wyklucza pisanie zwięzłego, poprawnego kodu. Po prostu czuję, że dzięki temu twój projekt znacznie łatwiej wpadnie w złe praktyki programistyczne.
Rozważ następujący okropny kod:
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;
}
Tego rodzaju nie tylko wymaga bardziej przejrzystej dokumentacji, aby określić zamiar, ale także pozostawia miejsce na niejasne błędy. Co zrobić, jeśli modyfikuje developer param1w bar()? Jak myślisz, ile czasu zajmie przeglądanie bazy kodów o wystarczającej wielkości, aby to złapać? Trzeba przyznać, że ten przykład jest nieco nieszczery, ponieważ zakłada, że programiści już popełnili kilka anty-wzorców do tego momentu. Pokazuje jednak, jak przepuszczanie obiektów zawierających parametry stwarza większe pole do popełniania błędów i niejednoznaczności, wymagając większej sumienności i przestrzegania stałej poprawności.
Tylko moje dwa centy w tej sprawie!