2019独角兽企业重金招聘Python工程师标准>>>
全局变量的应用场景
程序中的某些资源之多能有一个,比如计数器、配置信息、程序运行状态等,而且许多地方需要访问他,那么这个资源就应该,也只能设置成全局变量。在稍微大点的软件中,全局变量基本是不可避免的。
全局变量的问题
因为到处都可以访问,无形中增加了程序模块之间的耦合度,增大出错概率。
多线程环境下非常容易出问题。
变量命名冲突。
请补充。
面向对象中解决问题了吗?
正因为全局变量不可避免,面向对象语言(如无说明特指c++/java/c#)也提供了全局变量功能——static变量。这个static变量是哪个class也好,属于哪个namespace的也好,你再弄点弯弯绕封装成单例模式也好,他都是全局变量,任何有权限的地方都可以访问。上面所列的三条问题中,前两条,也就是问题最大的两条,根本没有解决。而即使非面向对象语言(C)中,人们也知道把全局变量开头放个g_ 的标记,第三条可以说不是问题。
我的实在是想不出面向对象解决了全局变量的什么问题,因此放了”请补充“这么一条。不过我估计,再怎么补充也无非证明我的观点:面向对象根本无法避免全局变量,全局变量带来的问题也一丁点没有解决。
C语言为了保护全局变量,可以把它生命成static,因此也别拿private说事儿。另外private是个很扯淡的关键字,它对程序健壮性的提高基本为0——C语言没有private也没见哪个变量被不小心修改导致问题。
相信“面向对象能解决全局变量问题“的,往往是新手。因为新手写的程序都很短,看起来所有变量都在一个类中,就以为没有了全局变量。再不就是没思考能力的,别人说什么都信。