作爲我的第一語言,並且從其他例子中完全教導過,我從未質疑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程序員期望在例程開始時看到所有使用的變量。有沒有我錯過了,可以解釋這種做法的好處,或者至少它是從哪裏來的?
在VBA中,我總是在子/函數等的頂部聲明變量,以使其他人更容易來到我後面並調試/擴展我的代碼。一般來說,我做VBA的人幾乎沒有編程背景。 – Chris
我不完全確定它確實幫助他們。如果有什麼讓它變得更難。 –
有點偏離主題,但VBScript將變量提升到作用域(全局或函數)的頂部,就像Javascipt一樣。所以下面的代碼將在VBScript中運行:'Option Explicit:Msgbox i:Dim i'。 –