Java中的变量声明放置指南

时间:2011-11-15 23:59:50

标签: java coding-style

Java变量似乎有两个可接受的变量声明放置,每个变量都有不同的 raison d'être

Sun's code conventions我们可以看到:

  

仅在块的开头放置声明。 (一个街区是任何一块   用大括号“{”和“}”包围的代码。)不要等待声明   变量直到第一次使用;它会让那些粗心的程序员感到困惑   并阻碍了范围内的代码可移植性。

然而,在备受好评的"Code Complete"和其他一些作者提倡将变量范围缩小到最低限度。这基本上是等到第一次使用之前声明变量。

这两种方法显然是矛盾的,尽管我可以看到两者的重点。

我应该遵循哪个?对此事有何共识?

5 个答案:

答案 0 :(得分:14)

变量声明尽可能接近其使用,原因有两个:

  • 垂直位置
  • 工具提示

垂直位置可以更轻松地推断代码块。读者必须做的扫描越少,就越容易理解代码的作用,以及它的副作用

减少变量范围还可以为自动化工具(如重构)提供更好的工具提示。相关事物越紧密,它们就越明显。

这就是说:如果一个方法足够长以至于上述点可以发挥作用,那么该方法可能已经太长了,无论如何都应该重构。

答案 1 :(得分:1)

  

基本上等到第一次使用变量时才会声明变量。

实际上并非如此,这两种情况并不冲突。限制变量的范围意味着该变量实际上不存在于该范围之外。 E.g。

for(int i=0; i<10;i++){
   int a = 5;
   doSomething(a);
}

在这种情况下,a的范围仅限于for block,这就是Code complete引用的内容。

无论如何我同意sun,范围内的变量(类,方法,块等)应该在开头声明。

答案 2 :(得分:0)

我个人认为无论哪种方式都没问题。我认为只要变量名称足够描述,它就不重要了。再次,这只是我的意见。我不得不经历许多不是我编写的代码,而且我遇到的变量最大的挫败感是他们的名字不是很具描述性。大多数IDE都可以选择“转到定义”,因此在您声明它们的位置并不重要。

答案 3 :(得分:0)

这两个陈述不一定是矛盾的。范围由大括号决定,因此如果您在靠近使用它们的位置开始一组新括号,则与Sun编码约定一致。当然,如果您只是随意插入范围限制,那么读取代码流程就会出现问题。

但是,我发现在类的顶部声明字段非常重要,尤其是可变字段。从长远来看,理解一个对象的状态可能是一个类中最难的部分,并且在该类的开头放置声明清楚地说明了该类所处的重要状态。

答案 4 :(得分:0)

我还推荐Joshua Bloch撰写的“Effective Java”,以了解为什么应该在首次使用它们时声明变量的更多理由。