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 lunghi percorsi di chiamate di funzioni nidificate?
Comprendo che l'ambiente globale può rendere imprevedibile lo stato di un programma perché molte funzioni possono modificare variabili condivise, ma tuttavia, lo spazio globale rende le cose così facili.
Lasciami spiegare:
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
}
Sento che la seconda via dà così 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 ad una variabile nell'ambiente globale, perdendo anche la riusabilità quando, ad esempio, voglio operare finallyDoSomethingWithX
con un'altra variabile diversa tha globalX
.
Penso che questo mi stia succedendo perché in realtà non sto usando schemi di progettazione perché sto programmando in Javascript, che per me sembra un linguaggio one-script-deal-all-all per progetti medi.
Qualche consiglio? modelli? Posso essere più specifico se necessario.