Mam bardzo proste pytanie, które prześladuje mnie od jakiegoś czasu, gdy mój kod zaczyna się powiększać.
Czy parametry powinny być zastępowane zmiennymi globalnymi, gdy przechodzą przez długie trasy zagnieżdżonych wywołań funkcji?
Rozumiem, że środowisko globalne może sprawić, że stan programu jest nieprzewidywalny, ponieważ wiele funkcji może modyfikować wspólne zmienne, ale globalna przestrzeń sprawia, że wszystko jest takie proste.
Pozwól mi wyjaśnić:
functionA(){
x = something
functionB(x)
}
functionB(x){
functionC(x)
}
functionC(x){
finallyDoSomethingWithX(x)
}
finallyDoSomethingWithX(x){
x += 1 //Very dummy example ignoring pass by value, not reference.
}
Zastąpione przez:
globalX;
functionA(){
globalX = something
functionB()
}
...
...
...
finallyDoSomethingWithX(){
globalX += 1
}
Wydaje mi się, że drugi sposób daje tyle swobody w programowaniu, ponieważ parametry mogą się łatwo kumulować, a czasami mogą być bardzo ograniczające, gdy kod musi być ponownie użyty, ale jednocześnie mam wrażenie, że funkcja straci swoją modułowość, gdy jest powiązana ze zmienną w środowisku globalnym, tracąc także możliwość ponownego użycia, gdy na przykład chcę operować finallyDoSomethingWithX
inną zmienną niż ta globalX
.
Wydaje mi się, że tak się dzieje, ponieważ tak naprawdę nie używam wzorców projektowych, ponieważ programuję w języku JavaScript, co dla mnie wydaje się być językiem jednego skryptu dla wszystkich średnich projektów.
Jakieś porady? wzory? W razie potrzeby mogę być bardziej szczegółowy.