使用局部变量还是全局变量更好



使用局部变量还是全局变量更好?

比方说,谈论2000多行android(java)服务类,所有服务都在"请求"对象和类似的共享对象上工作。

若我让所有的东西都是局部的(保持在函数内部),我需要每次传递许多变量,或者多次覆盖同一个函数。我需要确保对象和子对象也不是null。

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

在函数内部定义变量或全局定义变量的好的一面和坏的一面是什么。在实践和理论上(可读性等)。

有建议的方法吗?

谢谢。

总是喜欢局部而不是全局。如果你需要将数据作为多个参数传入,那就顺其自然吧。至少你要明确地说明你的函数依赖于什么数据。参数太多肯定是个问题,但将其中一些参数作为全局参数卸载并不是解决办法。

如果你依赖全局变量,可能不太清楚某些数据来自哪里。如果全局变量是可变的,那么一旦你开始尝试调试一个难题,你就会遇到麻烦,因为当某些全局变量被修改时,这可能并不明显。

不过请注意,不可变的常量全局变量也不错。如果你有一个在许多函数中都需要的常数(比如PI),那么将其全局化是有意义的。不可变常数不会受到上述缺点的影响,因为它们不会改变。

您编写了一个超过2000行的服务类。您已完成项目。凉的现在一个月后,你收到了一个错误报告,需要修复它。


让我们了解两种不同的情况:

案例1

您已返回服务代码。您可以看到func1()使用globalVariabl1。好吧,但现在它的价值是多少?它是如何变化的?globalVariabl1在发挥作用之前是谁突变的?所有这些突变的序列是什么?你不会知道的。弄清楚这一切将是相当困难的。

案例2

您返回代码,看到func0()获取一些东西,然后将其作为参数传递给func1(param1)。你清楚地知道数据是什么,它是如何到达这里的。


在什么情况下更容易解决错误?大多数时候,案例2会让它变得更容易。

局部变量

局部变量总是对你有帮助的。即使在编写代码并使用局部变量时,调用语句本身也会告诉您此函数依赖于此特定数据。这有助于你小心你所传递的信息。

全局变量

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

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

我知道这个问题已经得到了回答,我投票支持Carcigenate的答案。

为了详细阐述他的观点,我建议您尝试测试驱动开发实践。一旦您开始将代码与单元测试结合起来编写,您就会意识到全局变量可能有多糟糕,并且您会意识到您编写的代码在不实现不必要的依赖注入的情况下无法进行测试。

还有一件事。每当您开始处理多线程和并发时,全局变量都是一个巨大的错误。听起来你并没有在处理这个问题,但在你决定制作一个全局变量时,请记住这一点。

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

相关内容

最新更新