Eu tenho uma pergunta muito simples que me assombra há um tempo quando meu código começa a crescer.
Os parâmetros devem ser substituídos por variáveis globais quando passam por longas rotas de chamadas de funções aninhadas?
Entendo que o ambiente global pode tornar o estado de um programa imprevisível porque muitas funções podem modificar variáveis compartilhadas, mas ainda assim, o espaço global facilita as coisas.
Deixe-me me explicar:
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.
}
Substituído por:
globalX;
functionA(){
globalX = something
functionB()
}
...
...
...
finallyDoSomethingWithX(){
globalX += 1
}
Eu sinto que a segunda maneira dá tanta liberdade para programar porque os parâmetros podem se acumular facilmente e também podem ser muito restritivos às vezes quando o código deve ser reutilizado, mas ao mesmo tempo, sinto que a função perderá sua modularidade quando estiver relacionada a uma variável no ambiente global, perdendo também a capacidade de reutilização quando, por exemplo, quero operar finallyDoSomethingWithXcom outra variável diferente tha globalX.
Acho que isso está acontecendo comigo porque, na verdade, não estou usando padrões de design porque estou programando em Javascript, o que para mim parece uma linguagem de um script que lida com tudo para projetos médios.
Algum conselho? padrões? Eu posso ser mais específico, se necessário.