35

作为 NetBeans 的狂热用户,当我引入一个新变量时,我不断收到有关拆分变量声明和分配的建议。作为一个超级快速的例子,让我们看看这个 Java 行:

String someInput = JOptionPane.showInputDialog(null, "- Enter something: "); 

相对:

String someInput;
someInput = JOptionPane.showInputDialog(null, "- Enter something: "); 

NetBeans 似乎更喜欢后者(不过我不知道其他 IDE)。虽然它显然是双向的,但如果有的话,这会被认为是“好的做法”吗?还是纯粹是个人喜好问题?

(显然,将两者分开意味着您可以将一条额外的线合并为一条,但这不是重点。)

4

6 回答 6

40

如果您只是要将它们放在连续的行中,则没有理由拆分声明和赋值。如果赋值是有条件的,或者如果它需要进入一个单独的代码块(如 try/catch,或者如果赋值进入构造函数等),我只会拆分它们。

于 2013-04-11T16:22:49.240 回答
19

一种可以追溯到早期静态类型编程的常见模式是在需要限定范围的块的顶部声明您需要的所有变量,然后随后分配给这些值。

话虽如此,只要您能够在一年的时间内将代码的意图清楚地传达给与您一起工作的人或您自己,这并不重要。

让我们改变对程序构建的传统态度:与其想象我们的主要任务是指导计算机做什么,不如专注于向人类解释我们想让计算机做什么。——唐纳德·克努斯

于 2013-04-11T16:24:50.877 回答
16

这是在 7.0 和 7.3 之间添加到 NetBeans 的一个选项。如果您不喜欢这个提示,可以通过取消选中来更改它:工具 > 选项 > 编辑器 > 提示 > 建议 > 拆分声明

NetBeans > Prefs > Hints > Suggestions > Split Declaration 的屏幕截图

于 2013-04-11T17:52:09.050 回答
3

Netbeans 建议这样做,因为它可以加快编码速度,例如考虑这个分配

final String myString = "somevalue"

然后您决定实际上该值取决于一些boolean

final String myString;
if(something) {
    myString = "somevalue"
} else {
    myString = "someothervalue"
}

要将其中一种转换为另一种,您可以使用代码提示来溢出声明和赋值,并使用if...else模板在很少的步骤中生成代码。

一般来说,如果您是无条件分配,则没有理由拆分声明和分配。

于 2013-04-11T16:31:12.067 回答
0

大多数编程社区都非常重视的 Code Complete 在其第 241 页中建议,作为防御性编程的问题,您可以在声明每个变量时对其进行初始化(您的第一个选项)或将其初始化为接近首次使用的位置(你的第二个选择)。

尽管如此,本书建议第二个选项更好,因为如果您使用第一个选项,您的变量可能在其声明和使用之间发生了变化。

在您的情况下,第二种情况下的声明和使用之间的区别是一行。因此,本书的担忧不适用。尽管如此,它的担忧是合理的,这可能是 Netbeans 设计人员包含此技巧的原因(即使他们过度使用了它)。

于 2013-04-11T16:29:18.790 回答
0

我不认为这有什么大不了的。选择你喜欢的风格,并始终坚持下去(如果你在一个团队中,如果每个人都以类似的方式布置他们的代码,这会有所帮助)。

我个人更喜欢在声明时初始化我的变量。出于这个原因,我更喜欢前者而不是后者。

于 2013-04-11T16:23:51.173 回答