4

作为我的第一语言,并且完全从其他人的例子中学到,我从未质疑 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 程序员希望在例程开始时看到所有使用的变量。有没有我错过的可以解释这种做法的好处或至少它来自哪里?

4

2 回答 2

2

我认为这两种方式只是VBA中不同的编码风格

在旧的 C 标准中,所有的声明都必须放在最前面,我想很多人只是采用了这种习惯并将其带入到其他 PL 中,例如 VBA。

对于变量名称的简短列表,在顶部声明变量很清楚。长长的变量名列表将无法阅读

稍后将介绍声明变量接近使用它的位置。对于具有优化器或比 VBA 更大范围的 PL,我认为这种做法比“在顶部声明”具有明显的优势。(就像您可以声明范围仅在 FOR 循环中可见的变量一样)然后优化器将为您更改范围。(用 VBA 的话,它可能会将 GLOBAL 变量更改为 PROCEDURE 变量)

对于 VBA,没有偏好

于 2012-12-13T10:22:40.797 回答
2

我在顶部声明了所有变量。我认为宣布它们更接近于首先使用掩码(至少)应该首先解决的另外两个问题。

  1. 程序太长:如果您的程序超出了屏幕的大小,可能是它做的太多了,应该分成更小的块。您还会发现,当您的程序很小且只做一件事时,单元测试更容易编写。
  2. 变量太多:如果你有一堆相关变量,考虑使用自定义类模块或用户定义类型。它将使代码更具可读性和更易于维护。

如果您的过程很短并且您正在使用类和 UDT,那么在使用点声明变量的好处就会减少或消除。

于 2012-12-13T18:30:29.450 回答