Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 拆分声明和赋值=良好实践?_Java_Variables_Variable Assignment_Declaration - Fatal编程技术网

Java 拆分声明和赋值=良好实践?

Java 拆分声明和赋值=良好实践?,java,variables,variable-assignment,declaration,Java,Variables,Variable Assignment,Declaration,作为NetBeans的热心用户,我在引入一个新变量时,不断收到关于拆分变量声明和赋值的建议。作为我脑海中的一个超级快速的例子,让我们以以下Java行为例: String someInput = JOptionPane.showInputDialog(null, "- Enter something: "); 与: String someInput; someInput = JOptionPane.showInputDialog(null, "- Enter something: ");

作为NetBeans的热心用户,我在引入一个新变量时,不断收到关于拆分变量声明和赋值的建议。作为我脑海中的一个超级快速的例子,让我们以以下Java行为例:

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

String someInput;
someInput = JOptionPane.showInputDialog(null, "- Enter something: "); 
NetBeans似乎更喜欢后者(尽管我不知道其他IDE)。虽然它显然是双向的,但哪一种被认为是“良好实践”,如果有的话?或者这纯粹是个人喜好的问题


(很明显,拆分这两行意味着一个额外的行,您可以将其合并为一行,但这不是重点。)

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

我认为这没什么大不了的。选择一种你喜欢的风格,并始终坚持下去(如果你是团队中的一员,那么如果每个人都以同样的方式展示他们的代码,这会有所帮助)


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

追溯到早期静态类型编程的一种常见模式是,在块的顶部声明所有需要确定作用域的变量,然后分配给这些值

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

让我们改变我们对项目建设的传统态度:而不是想象我们的 主要任务是指导计算机做什么,让我们 专注于向人类解释什么 我们想要一台计算机来做唐纳德·克努斯


大多数编程社区都很看好的CodeComplete在其第241页中建议,作为防御编程,您可以按照声明的方式初始化每个变量(您的第一个选项),也可以在接近第一次使用的位置初始化它(您的第二个选项)

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


在您的例子中,第二种情况下声明和用法之间的区别只有一行。因此,本书的关注点并不适用。尽管如此,它的关注是合法的,这可能是NETBUS设计者包含这个提示的原因(尽管他们过度使用它)。N/BeNETBeNeBes建议这一点,因为它可以加快编码,例如考虑这个任务

final String myString = "somevalue"
然后确定该值实际上取决于某个
布尔值

final String myString;
if(something) {
    myString = "somevalue"
} else {
    myString = "someothervalue"
}
要从一个转换为另一个,您可以使用代码提示来拆分声明和赋值,并使用
if…else
模板在很少的步骤中生成代码


通常,如果您是无条件分配,那么就没有理由分割声明和分配。

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


Prefs>hits>Suggestions>Split Declaration“>

让我困惑的是,有人会更喜欢后者而不是前者。嗯,也许你在NetBeans中有一些有趣的代码风格!第一种选择是一种“经济”的方式来初始化对象。(我想)第二个比较干净,因为它允许对赋值中的变量声明进行分组。我认为从纯美学的角度来看,第二个更可取,但第一个更简单。我建议你做你认为最简单、最清楚的事情。对我来说,这是第一种情况。Pretty当然netbeans通常只在突出显示行时提供此功能,这实际上不是一个“问题”。它是一个可选的快捷方式,就像“invert if statement”警告一样。+1很好的引号,谢谢!+1
declare;declare;declare;assign;assign;assign;
可能是netbeans试图强制的样式,而不是
declare;assign;declare;assign;declare;assign;
。非常好的引语,谢谢!是的,关于这一点,我想说清楚了。最好还是坚持对你有意义的东西,而不是IDE!你似乎误用了这本书的建议。你所引用的页面声明“某些语言,包括Visual Basic,不支持按声明的方式初始化变量”,但Java不是这些语言中的一种,因此这一点不适用。本书接着指出,“理想情况下,声明并定义每个变量,使其接近最初使用的位置。。。在支持它的语言中,例如C++和java,变量应该被声明和定义在它们第一次使用的地方。“它不是java的任一个或命题。我不认为将分配从声明分配到抢占使用这种情况的可能性(I/ER,TIG/catch,等等)。值得一提的是,当你认为它需要重写变量名时,“让我们把所有的代码都延长一点,不必再复杂了,这样我们就可以在一个已经很快的任务中剃掉一个可以忽略的时间,这是有必要的。”“是的。不,@AlexanderMomchliov,代码不同。一个是直接赋值,一个是条件赋值。我真的看不出你的评论是否合适。我的观点是NetBeans的推理是愚蠢的。他们不鼓励直接初始化,更喜欢这种无意义的两行方法,因为这样做很可能会使有一天分配更有条件。@AlexanderMomchliov他们不这样做。你的评论完全是错误的。对不起,对于IntelliJ IDEA,它位于文件-设置-编辑器-意图-Java-声明-拆分声明。