Ho una domanda molto semplice che mi perseguita da un po 'quando il mio codice inizia a crescere.
I parametri dovrebbero essere sostituiti da variabili globali quando attraversano lunghe rotte di chiamate di funzione nidificate?
Capisco che l'ambiente globale può rendere imprevedibile lo stato di un programma perché molte funzioni possono modificare le variabili condivise, ma lo spazio globale rende le cose così facili.
Mi spiego:
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.
}
Sostituito da:
globalX;
functionA(){
globalX = something
functionB()
}
...
...
...
finallyDoSomethingWithX(){
globalX += 1
}
Penso che il secondo modo offra tanta libertà di programmazione perché i parametri possono accumularsi facilmente e possono anche essere molto restrittivi a volte quando il codice deve essere riutilizzato, ma allo stesso tempo sento che la funzione perderà la sua modularità quando è correlata a una variabile nell'ambiente globale, perdendo anche riusabilità quando, ad esempio, voglio operare finallyDoSomethingWithX
con un'altra variabile diversa da quella globalX
.
Penso che questo mi stia succedendo perché in realtà non sto usando modelli di progettazione perché sto programmando in Javascript, che per me sembra un linguaggio a script unico per tutti i progetti di medie dimensioni.
Qualche consiglio? modelli? Posso essere più specifico se necessario.