Java变量似乎有两个可接受的变量声明放置,每个变量都有不同的 raison d'être。
从Sun's code conventions我们可以看到:
仅在块的开头放置声明。 (一个街区是任何一块 用大括号“{”和“}”包围的代码。)不要等待声明 变量直到第一次使用;它会让那些粗心的程序员感到困惑 并阻碍了范围内的代码可移植性。
然而,在备受好评的"Code Complete"和其他一些作者提倡将变量范围缩小到最低限度。这基本上是等到第一次使用之前声明变量。
这两种方法显然是矛盾的,尽管我可以看到两者的重点。
我应该遵循哪个?对此事有何共识?
答案 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”,以了解为什么应该在首次使用它们时声明变量的更多理由。