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 finallyDoSomethingWithX
com 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.