尽可能延迟在最近的大括号内声明局部变量,还是在它们所属的大括号中声明?

7
我正在为我的组织制定一些编程实践标准。在这个过程中,我遇到了“此问题的标题”问题。
有些人认为尽可能晚地声明变量是最好的,而有些人则认为将它们放在方法起始括号的顶部是好的。
Oracle标准也建议尽早声明它们。因此,我倾向于在它们所属的最近花括号处声明。
问题在于:
  1. 代码可读性
  2. 性能
  3. 更少的错误
欢迎任何评论。

1
遵循Oracle标准有什么问题吗?如果您想让它们更接近特定的代码,只需用{}将其括起来,如果您喜欢定义本地作用域。 - user387184
4个回答

13
这是麦康奈尔在他的必读书籍《代码大全2》中所说的话:
理想情况下,应该在使用变量的地方附近声明和定义每个变量。声明可以确定变量的类型,而定义则为变量分配一个特定的值。在支持它的语言中(如C++和Java),变量应该在首次使用时声明和定义。
他还建议尽可能短暂地保留变量,并最小化作用域。
对我来说,重要的是遵循命名约定(Sun的Java代码约定被广泛使用)。至于它们最初声明的位置,为了性能原因,我会尽可能延迟声明(声明您可能不会使用的变量有点浪费)。除非您事先知道它一定会被使用,在这种情况下,您可以将其与其他变量分组以提高可读性。我认为这就是JCC对此的说法

1

为了提高代码可读性,我发现在块的开头声明变量是最好的选择。
当浏览代码时,您总是知道在哪里查找声明,而不必在代码行之间查找。当查看方法时,先查看已声明的变量,然后再查看代码也更好。我认为这就像烹饪书中的食谱,您将所需的成分与食谱说明分开列出。

至于性能,我不认为这会有任何影响。虽然晚些时候声明可能会通过仅在块的末尾创建变量来节省一些内存,但您将使用与在块的开头声明相同的内存量。

容易出错的原因与可读性相同。

在需要最小范围内声明并在块的开头声明。


1

我认为“代码可读性”是唯一重要的点。如果变量在使用的地方附近声明,那么代码肯定更易读。

但是,有时为了防止新程序员在语言转换时出现“错误”,可能会采用特定的编码方法。例如,JavaScript具有函数作用域和Java具有块作用域。如果Java程序员不知道JavaScript的函数作用域,则可能会在JavaScript中遇到问题。因此,在JavaScript的情况下,为了避免潜在的错误,建议在函数/方法的开头声明所有内容。

就像我上面提到的,“性能”不应该成为一个问题。但是,如果您选择在使用的地方附近声明变量,它可以帮助减少变量的声明和初始化成本。


0

很好的问题Javanator,根据我的分析

代码可读性:

在方法开始时声明变量是一个好习惯,有助于维护,减少混乱。

性能方面:

情况1:

如果我们在方法开始处声明变量,并且该方法有数百条语句,在最后50条语句之前需要10个变量,这些变量会不必要地占用内存。

如果我们在方法中需要20个变量,并且我们在开头就声明了它们,如果在非常早的语句中出现任何异常,这些变量将不必要地占用内存。

情况2:

如果我们在需要时声明变量,可以略微提高性能。


1
我认为,如果你需要在一个函数中使用如此大量的变量,那么无论它们在哪里声明,这个函数都不会很容易阅读。 - paulm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接