【问题标题】:Reuse Class Level Variables or Create New Local Variables?重用类级变量还是创建新的局部变量?
【发布时间】:2016-06-08 15:12:08
【问题描述】:

我已经多次看到这个问题被问过,但方式不同,答案从来都不是我一直在寻找的。我确信我可以做一些测试,但我觉得这对其他人来说可能是一个很好的资源,也许可以就此事获得一些意见。


问题是:我有一个实现配置接口的类。每个被继承的方法通常都有一个变量。最常见的是通用对象

如果这些方法被一遍又一遍地调用,创建临时类级变量(每次调用方法时都被覆盖)或者每次都创建一个新变量会更有效吗?

尤其是在循环期间。我通常尝试将所有变量都保留在本地,但最近与我合作的一位程序员做了相反的事情并更改了我的一些代码,因为如果我需要进行修改,将来可以更容易地更改它。


如果这令人困惑,这里有一个例子来说明我的意思:

// Reused Local Variable
private Object tempObject;

public char getChar(String key) {
    tempObject = get(key); /* method that grabs and object from a map */

    // more code...
}


// Recreated Local Variable
public char getChar(String key) {
    Object tempObject = get(key);

    // more code...
}

请不要将此标记为重复的问题。这个问题有很多,但他们都有不同的回答,差别很大。

我做了我的研究,所以不要说我没有。 (在这个网站上似乎是一个大问题。你无法再获得任何帮助,因为人们很快就标记帖子甚至不阅读它们,因为它们与其他帖子相似)。

这些答案:here,声明如果你想重新格式化你的代码,你将无缘无故地为自己做更多的工作。并且取决于编译器,它可能会自动将代码重构为最佳用法。但是如果有多个用户在不同的编译器上编译代码,一个构建可能会更多。

这些答案:here,似乎只是在谈论在单个方法中重用变量。或者为不同的值或值类型重用一个变量。如果该值与第一个值不同,它应该有自己的名字。除非所述变量的命名是通用的并且可以用于不同的事物。整数 'i' 可能不是最好的重用,因为它很常见,可以在其他可能导致冲突的地方使用。只要您输入的值相关且兼容,就可以重复使用诸如“分数”之类的内容。

【问题讨论】:

  • 有趣的是,人们根本不想提供帮助,甚至不想提供任何建议。相反,他们只是对该主题投反对票和/或报告它。这个网站很棒。爱这里所有乐于助人的人。

标签: local-variables class-variables


【解决方案1】:

我将对前面提到的问题的一些答案稍微重述一下。为了可维护性,请使用局部变量。

如果您使用 local 变量,那么任何编辑或调试此代码的人(包括您自己,几个月后)都会立即知道 只有 代码 在您的getChar() 方法内 可以更改tempObject 的值。知道这一点很有用。

另一方面,如果你将它定义为一个实例变量,那么事情就复杂多了。假设您正在考虑让您的getChar 方法调用不同的实例方法(我们称之为foo)。然后,突然之间,您必须花时间弄清楚foo 是否依赖于,或者更改tempObject 的值。以及foo 调用的任何方法是否会改变它。等等……

还有很多其他类似的问题可能会出现。而且我什至没有涉及线程问题。

使用局部变量可以让以后阅读代码的人非常清楚确切发生了什么 - 它在这里使用。如果你把它变成一个实例变量,每个人都得停下来想一想。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    相关资源
    最近更新 更多