作为我的第一语言,并且完全从其他人的例子中学到,我从未质疑 VBA 中的标准做法,即在模块、例程或函数的开头对所有变量声明进行分组,如本例所示。
Sub Traditional()
Dim bVariable as Boolean
Dim OtherVariable
' Some code using OtherVariable goes here
'
' Now we use bVariable
bVariable = True
Do While bVariable
bVariable = SomeFunction()
Loop
End Sub
现在我正在学习其他语言的标准做法是声明变量尽可能接近它们的使用位置,如下所示:
Sub Defensive()
Dim OtherVariable as String
' Some code using OtherVariable goes here
'
' Now we use bVariable
Dim bVariable as Boolean
bVariable = True
Do While bVariable
bVariable = SomeFunction()
Loop
End Sub
作为一种防御性编程实践,这对我来说似乎是完全明智的——因为它限制了跨度和生存时间(如Code Complete中所述),所以我想知道是否有任何理由不在 VBA 中做同样的事情?我能想到的可能原因是内存、运行时间(例如在循环内重复声明)、传统——可以说是一个很好的理由,因为必须有成千上万的 VBA 程序员希望在例程开始时看到所有使用的变量。有没有我错过的可以解释这种做法的好处或至少它来自哪里?