使用本地或全局变量是否更好

时间:2017-07-24 23:35:40

标签: java android software-design

使用本地或全局变量是否更好?

让我们说说2000多行android(java)服务类,所有服务都在处理'request'对象和类似的共享对象。

如果我将所有内容都设置为本地(保留在函数内部),我需要每次都传递许多变量,或者多次覆盖相同的函数。我需要确保对象和子对象也不为空。

如果我将一些变量设置为全局(在整个类中),我可以共享它们,在函数中使用它们。我认为这将使一切变得更容易。

在函数内定义变量或定义全局变量有什么好处和坏处。在实践中,在理论上(可读性等)。

有建议的方式吗?

谢谢。

5 个答案:

答案 0 :(得分:9)

总是偏爱本地而不是全球。如果您需要将数据作为多个参数传递,那么就这样吧。至少那时你明确地说出你的功能所依赖的数据。拥有太多参数肯定是个问题,但将其中一些作为全局变量卸载并不是答案。

如果您依赖全局变量,那么某些数据的来源可能并不明确。如果全局变量是可变的,一旦你开始尝试调试一个难题,你就会弄得一团糟,因为某些全局变量被修改时可能并不明显。

注意虽然不可变的常量全局变量并不坏。如果您在许多函数中都需要常量(例如PI),那么将其设置为全局是有意义的。不可变常数不会受到上述缺点的影响,因为它们无法改变。

答案 1 :(得分:3)

自己看看:

你写了2000多行服务类。你完成了项目很酷! 一个月后,您报告了一个错误并返回服务代码。您看到func1()使用globalVariabl1。好的,但现在它的价值是什么?它是如何变化的?在此功能发生之前谁会改变globalVariabl1?所有这些突变的序列是什么?你不知道。要弄清楚这一切是很困难的。

现在看到这一点:您回复了代码,并看到func0()抓取了某些内容,然后将其作为参数传递给func1(param1)。你清楚地知道数据是什么,它是如何得到的。

什么能让您更好地理解?

本地变量 一般来说,它是第二种观点。局部变量总能帮到你。即使您编写代码并使用局部变量,call语句本身也会告诉您此函数依赖于此特定数据。它可以帮助你小心你传递的东西。

全局变量 当全局变量表示类/对象的state时,或者甚至当它们是常量(通常应该是所有大写字母)时,它们都可以。当你只需要频繁访问该值时它们也可以很好,并且你知道变量将在你使用它时始终被初始化(例如在onCreate()中初始化它)

答案 2 :(得分:2)

我知道这个问题已经回答了,我对Carcigenicate的回答表示赞同。

详细说明他的观点我建议你尝试测试驱动开发实践。一旦你开始编写代码与单元测试一起,你就会意识到全局变量有多糟糕,你会发现你编写的代码无法在不必实现不必要的依赖注入的情况下进行测试。

还有一件事。每次开始处理多线程和并发时,全局变量都是一个巨大的错误。这听起来并不像你在处理那个,但在你决定制作全局变量的时候记住它。

答案 3 :(得分:1)

Java中没有全局变量。您指的是成员变量。基本规则是变量应具有尽可能小的封闭范围。

答案 4 :(得分:0)

这一切都取决于变量的范围。如果您认为某个变量通过各种函数传递多个值,则使用局部变量并在函数调用中传递它们。 如果您认为需要使用的某个变量具有常量值,则将其声明为全局变量。