尽可能晚地或在它们所属的最近的大括号中声明局部变量?

我正在为我的组织设定一些编程实践标准。 这样做我遇到了问题“这个问题的标题”

有些人认为最好尽可能晚地声明变量,有些人发现将它们放在方法起始大括号的顶部是好的。

Oracle Standard也表示要尽早声明它们。 所以我赞成在他们所属的最接近的大括号上声明它们。

令人担忧的是

  1. 代码可读性

  2. 性能

  3. 减少错误

欢迎任何评论。

这就是麦康奈尔在其必读书“守则完整2”中所说的:

理想情况下,声明并定义接近其使用位置的每个变量。 声明建立变量的类型。 定义为变量分配特定值。 在支持它的语言中,例如C ++和Java,应该声明和定义变量,使其接近首次使用的位置。

他还建议尽可能短的时间保持变量存在,并尽量减少范围。

对我来说重要的是遵循命名约定(Sun的Java代码约定被广泛使用)。 至于他们首先宣布的地方,我会因性能原因尽可能地延迟声明(声明你可能不会使用的var是一种浪费)。 除非您事先知道它将被肯定使用,在这种情况下,您可以将其与其他变量分组以提高可读性。 我认为这就是JCC所说的 。

对于代码可读性,我发现在块的开头声明变量是最佳选择。
当你通过代码时,你总是知道在哪里寻找声明而不必查看代码行。 在查看首先查看声明的变量然后是代码的方法时,它也更好。 我认为它就像烹饪书中的食谱一样,列出了与食谱说明分开的所需成分。

至于表现,我不知道这会有什么不同。 虽然通过仅在块的末尾需要时创建变量来声明延迟可能会保存内存的增加,但是如果在块的开头声明,则将使用相同的内存量。

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

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

我认为“代码可读性”是这里唯一重要的一点。 如果将变量声明得更靠近它们的位置,那么代码肯定更具可读性。

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

就像我上面提到的,’Performace’不应该是一个问题。 但是,如果您选择将变量声明为更接近它们的使用位置,则可以帮助减少变量的声明和初始化成本。

好问题Javanator,根据我的分析

代码可读性:

在方法启动时声明变量的良好做法,因为易于维护,并且较少混淆。

性能:

情况1:

如果我们在方法开头声明变量,并且方法有数百个语句,那么在50个语句不必要地占用这些变量的内存之前,我们最终需要10个变量。

如果我们在方法中需要20个变量并且我们在开始时声明,如果我们在非常开始的语句中得到任何exception而不必要地占用内存。

案例2:

如果我们在需要的地方声明变量,它会提供更多的性能。