У мене дуже просте питання, яке переслідує мене протягом певного часу, коли мій код починає зростати.
Чи слід замінювати параметри глобальними змінними, коли вони проходять довгі маршрути вкладених функцій викликів?
Я розумію, що глобальне середовище може зробити стан програми непередбачуваним, оскільки багато функцій можуть змінювати загальні змінні, але все-таки глобальний простір робить так просто.
Дозвольте мені пояснити:
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.
}
Замінено:
globalX;
functionA(){
globalX = something
functionB()
}
...
...
...
finallyDoSomethingWithX(){
globalX += 1
}
Я вважаю, що другий спосіб дає стільки свободи програмуванню, оскільки параметри можуть накопичуватися легко, а також можуть бути дуже обмежуючими, коли код потрібно повторно використовувати, але в той же час я відчуваю, що функція втратить свою модульність, коли вона пов'язана зі змінною у глобальному середовищі також втрачає можливість повторного використання, коли, наприклад, я хочу працювати finallyDoSomethingWithX
з іншою змінною, відмінною від tha globalX
.
Я думаю, що це трапляється зі мною, тому що я фактично не використовую шаблони дизайну, тому що я програмую в Javascript, що для мене відчуває себе як єдиний скрипт-угод для всіх середніх проектів.
Якісь поради? візерунки? Я можу бути більш конкретним, якщо потрібно.