当我在大学学习第一门编程课程时,我们被告知全局变量是邪恶的。应该不惜一切代价避免(因为你可以快速编写令人困惑和不可维护的代码)。第二年,我们学习了面向对象的编程,以及如何使用类创建模块化代码。
我发现每当我使用OOP时,我都使用我的类的私有变量作为全局变量,即,它们可以(并且)被类中的任何函数读取和修改。这并不是真正与我坐在一起,因为它似乎引入了全球变量在C等语言中所遇到的相同问题。
所以我想我的问题是,如何停止使用“全局”变量编写类?假装我用函数式语言写作会更有意义吗?我的意思是让所有功能都采用参数&返回值而不是直接修改类变量。如果我需要设置任何字段,我可以只取功能的输出并分配它而不是让函数直接执行。这似乎可以使更多可维护的代码,至少对于更大的类。什么是常见做法?
答案 0 :(得分:16)
我发现每当我使用OOP时, 我使用我的类的私有变量 全局变量,即它们可以 (并且)由任何人阅读和修改 在课堂上的功能。
这是完全可以接受的。
变量仅限于您的班级,因此它们不是“全局的”。
请参阅Encapsulation。
答案 1 :(得分:11)
我同意类成员变量有时会在某些方面感觉像全局变量。我发现重要的是保持类很小,然后每个变量只能从有限的几个地方访问。如果你只有几个庞大的类,那么成员变量和全局变量之间的差异有时会受到限制。
传递太多参数有时也是一个问题,如果你急于避免所有成员变量,你很容易就会得到太多参数,导致代码难以理解。
答案 2 :(得分:3)
类变量不是全局变量,它们是类的每个实例的本地变量。这是OOP的强大概念之一,并且完全可以接受(并且正确的方法[假设您的每个类都处理一个逻辑事物,请参阅:封装])。
答案 3 :(得分:2)
如果您的成员变量在整个应用程序中都可访问,那么我认为您正在为OOP错误地构造代码。将代码分解为更多,更小的类,每个类都有明确定义的目的。这样,现在每个私有成员变量的范围仅限于需要它的程序部分。