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 param1
w 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!