У меня очень простой вопрос, который преследует меня некоторое время, когда мой код начинает расти.
Должны ли параметры заменяться глобальными переменными при прохождении длинных маршрутов вызовов вложенных функций?
Я понимаю, что глобальная среда может сделать состояние программы непредсказуемым, потому что многие функции могут изменять общие переменные, но, тем не менее, глобальное пространство делает вещи такими простыми.
Позвольте мне объяснить себя:
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, который для меня ощущается как язык «один сценарий имеет дело со всеми» для средних проектов.
Любые советы? узоры? Я могу быть более конкретным, если это необходимо.
источник
Ответы:
Не используйте глобальные переменные.
Также не передавайте параметры в цепочки функций!
Это сложно, потому что вы не используете реальный пример. Но обычно будет лучший подход.
Допустим, у нас есть переменная пароля, которую мы должны использовать для вызова apis, inturn которой используются различными низкоуровневыми функциями.
Глобальный подход (псевдокод)
Подход с передачей параметров
Объектный подход
источник
Избегайте глобалов, таких как чума.
Любой код может изменить глобальный. Таким образом, если у вас была цепочка A (x) -> B (x) -> C (x) -> ... -> Z (x), и вы храните x в глобальном X, и теперь у вас есть цепочка A- > B-> C -> ...-> Z, то на каждом шаге этой длинной цепочки или в полностью независимом коде кто-то может изменить X. И значение, которое использует Z, может полностью отличаться от того, которое A началось с.
Это кошмар, если вы когда-нибудь захотите убедиться, что ваш код выполняет то, что должен делать, или делает то, что, как вы думаете, он делает.
источник