Ich habe eine sehr einfache Frage, die mich schon eine Weile verfolgt, als mein Code zu wachsen beginnt.
Sollten Parameter durch globale Variablen ersetzt werden, wenn sie lange Wege verschachtelter Funktionsaufrufe durchlaufen?
Ich verstehe, dass die globale Umgebung den Status eines Programms unvorhersehbar machen kann, da viele Funktionen gemeinsam genutzte Variablen ändern können, aber der globale Raum die Dinge so einfach macht.
Lassen Sie mich erklären:
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.
}
Ersetzt durch:
globalX;
functionA(){
globalX = something
functionB()
}
...
...
...
finallyDoSomethingWithX(){
globalX += 1
}
Ich bin der Meinung, dass der zweite Weg so viel Freiheit beim Programmieren bietet, weil sich Parameter leicht ansammeln können und manchmal auch sehr einschränkend sein können, wenn Code wiederverwendet werden muss, aber gleichzeitig habe ich das Gefühl, dass die Funktion ihre Modularität verliert, wenn sie sich auf eine Variable bezieht in der globalen Umgebung auch die Wiederverwendbarkeit verlieren, wenn ich zum Beispiel finallyDoSomethingWithX
mit einer anderen Variablen arbeiten möchte, die anders ist als diese globalX
.
Ich denke, das passiert mir, weil ich eigentlich keine Entwurfsmuster verwende, weil ich in Javascript programmiere, was sich für mich wie eine Ein-Skript-Umgang-mit-All-Sprache für mittlere Projekte anfühlt.
Irgendwelche Ratschläge? Muster? Ich kann bei Bedarf genauer sein.