作为我的第一语言,并且从其他例子中完全讲授,我从未质疑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程序员期望在例行程序开始时看到所有使用过的变量。有没有我错过的可以解释这种做法的好处,或者至少它来自何处?
答案 0 :(得分:2)
我认为两种方式都只是VBA中不同的编码风格
在旧C标准中,所有声明都必须在顶部,我认为很多人只是采用这种习惯并将其带入其他PL,如VBA。
对于变量名称的简短列表,可以清楚地在顶部声明变量。对于一长串变量名称
,它将是不可读的稍后会介绍声明接近其使用位置的变量。我认为这种做法比具有优化器或比VBA更大范围的PL的“声明在顶层”具有明显的优势。 (就像您可以声明范围仅在FOR循环中可见的变量)然后优化器将为您更改范围。 (在VBA中,它可以将GLOBAL变量更改为PROCEDURE变量)
对于VBA,没有偏好
答案 1 :(得分:2)
我将所有变量都声明在顶部。我认为他们更接近于首先使用掩码(至少)其他两个应该首先修复的问题。
如果你的程序很短并且你正在使用类和UDT,那么在使用点声明变量的好处就会减少或消除。