Variable declaration placement guidelines in Java [closed]

末鹿安然 提交于 2019-12-10 03:50:28

问题


There seems to be two accepted variable declaration placements for Java variables, each with different raison d'être.

From the Sun's code conventions we can see:

Put declarations only at the beginning of blocks. (A block is any code surrounded by curly braces "{" and "}".) Don't wait to declare variables until their first use; it can confuse the unwary programmer and hamper code portability within the scope.

However in the highly praised "Code Complete" and some other authors advocate for reducing the scope of a variable to a minimum. That is basically waiting to declare variables until their first use.

These two approaches are clearly contradictory although I can see the point for both of them.

Which should I follow? Is there any consensus on the matter?


回答1:


Variables should be declared as close to their use as possible, for two reasons:

  • Vertical locality
  • Tool hinting

Vertical locality makes it easier to reason about chunks of code. The less scanning a reader has to do the easier it is to understand what code does, and what side-effects it

Reducing variable scope also allows better tool hinting for automated tools, like refactoring. The closer together related things are the more obvious they are.

That said: if a method is long enough that the above points come in to play, it's likely the method is already too long, and should be refactored anyway.




回答2:


That is basically waiting to declare variables until their first use.

This is actually not true, and these two styes are not conflicting. Limiting the scope of the variable means that that variable, in fact, does not exist outside of that scope. E.g.

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

In this case, a is scope limited to the for block and this is what Code complete is referencing.

In any case I agree with sun, that variables within a scope (class, method, if block, etc.) should be declared at the beginning.




回答3:


My personal opinion is that either way is fine. I think as long as the variable names are descriptive enough, it doesn't really matter. Again, this is only my opinion. I've had to go through lots of code which wasn't written by me, and the biggest frustration with variables I've faced, is that their names are not very descriptive. Most IDEs will have the option of 'go to definition' so it doesn't really matter where you declare them.




回答4:


Those two statements do not need to be contradictory. Scope is decided by the curly brackets, so if you start a new set of brackets closer to where you use them, that is consistent with the Sun coding convention. Of course if you are just arbitrarily inserting scope limitations, that is a problem for reading the flow of the code.

However, I find it very important to declare fields at the top of the class, especially mutable fields. Understanding the state of an object can be the hardest part of a class over the long term, and putting the declarations at the beginning of the class clearly states what significant state the class holds.




回答5:


I also recommend "Effective Java" by Joshua Bloch for more reasons why one should declare variables where they are first used.



来源:https://stackoverflow.com/questions/8144890/variable-declaration-placement-guidelines-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!