分裂宣言和作业=良好实践?

xqui 发布于 2019-03-09 declaration 最后更新 2019-03-09 14:37 3 浏览

作为NetBeans的狂热用户,当我引入一个新变量时,我不断收到有关分离变量声明和赋值的建议。作为一个非常快速的例子,让我们来看看这条Java线:

String someInput = JOptionPane.showInputDialog(null, "- Enter something: "); 
与:
String someInput;
someInput = JOptionPane.showInputDialog(null, "- Enter something: "); 
NetBeans似乎更喜欢后者(但我不知道其他IDE)。虽然这两种方式明显有效,但如果可以的话,这将被视为“良好做法”?或者纯粹是个人喜好的问题? (很明显,将两者分开意味着你可以将它们合并为一个,但这不是重点。)
已邀请:

zrerum

赞同来自:

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

miste

赞同来自:

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

Screenshot of NetBeans > Prefs > Hints > Suggestions > Split Declaration

yautem

赞同来自:

我不认为这是一个大问题。选择你喜欢的风格,并始终坚持下去(如果你在一个团队中,如果每个人都按照类似的方式布置他们的代码,这会有所帮助)。 我个人更喜欢在声明时初始化我的变量。因此,我更倾向于前者而不是后者。

eet

赞同来自:

追溯到早期静态类型编程的常见模式是在需要作用域的块顶部声明所需的所有变量,然后随后分配给这些值。 话虽如此,只要您能够清楚地将您的代码的意图传达给您在其上工作的人,或者您自己在一年的时间内,它就不应该真正重要。

Let us change our traditional attitude to the construction of programs: Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do. -- Donald Knuth

xet

赞同来自:

大多数编程社区都非常认可的Code Complete在其第241页中建议,作为防御性编程的问题,您可以初始化每个变量(如您声明的那样)(您的第一个选项)或将其初始化为接近首次使用的位置(你的第二个选择)。 然而,本书建议第二种选择更好,因为如果你使用第一种选择,你的变量可能在其声明和使用之间发生了变化。 在您的情况下,第二种情况下声明和使用之间的差异是单行。因此,这本书的关注点不适用。然而,它的担忧是合法的,这可能是Netbeans设计师包含这个技巧的原因(即使他们过度使用它)。

id_cum

赞同来自:

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

final String myString = "somevalue"
然后,您确定该值实际上取决于某些boolean
final String myString;
if(something) {
    myString = "somevalue"
} else {
    myString = "someothervalue"
}
要将一个转换为另一个,您可以使用代码提示来溢出声明和赋值,并使用if...else模板以非常少的步骤生成代码。 一般情况下,如果您无条件分配,则没有理由拆分声明和分配。