我一直在读,使用全局变量是糟糕的编程设计,但这是否意味着全局常量也很糟糕?
有哪些替代方法而不是全局变量/常量,以及在多个源文件中声明常量的最佳方法是什么?
答案 0 :(得分:11)
全局变量背后的主要原因是依赖于共享状态,这使得程序的不同部分很容易通过以您不打算的方式操纵共享状态而导致对程序其他部分的意外干扰,使程序更容易出错,难以调试,难以维护。
另一方面,常量非常好,除了它们污染全局命名空间(这可能会在编译时通过更改编译单元中符号的含义而导致意外后果)。如果你可以在特定的命名空间/范围内声明它们,那么你会没事的。
答案 1 :(得分:4)
全局变量的真正问题在于它们鼓励从代码中的许多点进行更改。做某事的函数也有side effect变化的全局状态(事实上,Functional Programming根本不允许副作用来避免这种陷阱)。
编程风格很难正确调试和维护。
将数据保持在接近使用位置的位置,以便有一个明确定义的机制来改变它。
全局常量不会遇到同样的问题。
答案 2 :(得分:0)
全局变量导致依赖于共享状态的大量(通常是未知的)代码量的实际问题。这可以(确实)导致难以理解,跟踪等的交互。简而言之,许多代码最终会紧密耦合,这通常会导致问题。
全局常数主要是(潜在的)哲学问题。由于它们是不变的,因此全局变量中的大多数实际问题都不会出现。同时,质疑一个特定的常量是否是否全局是完全合理的。如果(例如)你正在处理物理学,那么将光速定义为全局常数可能是有意义的。根据不同的领域,Pi,e等等也可以作为全局变量。另一方面,如果您可以合理地将需要限制为更少的代码,那么这通常是可取的。 Pi的值不会改变,但类似
x = area(some_circle);
比以下更容易阅读/理解
x = some_circle.radius * some_circle.radius * Pi;