隱含和明確宣告 (Visual Basic)
在預設的情況下,Visual Basic 編譯器會強制使用「明確宣告」(Explicit Declaration),也就是您需要在使用每個變數之前先行宣告。 您可以移除此需求並允許「隱含宣告」(Implicit Declaration)。
Visual Basic 提供用來控制明確宣告的參數。 根據預設,此參數設定為 On,且編譯器會強制使用明確宣告。 如果此參數採用 Off,您不需要宣告就可以使用變數。
**明確宣告參數。**設定明確宣告參數為 On 或 Off 包括以下幾種方式:
在整合式開發環境 (IDE) 中設定適當的專案屬性。 按一下 [專案] 功能表中的 [<ProjectName> 屬性],然後按一下 [編譯] 索引標籤。 您可以設定 [Option explicit]、[Option strict] 和 [Option compare] 的預設值。
指定 /optionexplicit 命令列編譯器選項。
在程式碼開頭加上 Option Explicit 陳述式 (Visual Basic)。
如果使用 Option Explicit 陳述式,則該設定會覆寫專案屬性及編譯器選項設定,但這只會影響陳述式所在的原始程式碼檔案。
**效能優點。**設定 Option Explicit 為 On 的優點是強制在編譯時期而非執行階段推斷型別。 這會增加效能。
隱含宣告
如果將 Option Explicit 設定為 Off,可以在程式碼中直接使用變數,即會隱含宣告該變數。 編譯器會為所有隱含宣告的變數指派 Object 資料型別。 但如果您能以特定資料型別來明確宣告所有變數,則應用程式運作起來會更有效率。 這能夠減少命名衝突錯誤及拼字錯誤的發生率。 同時,編譯器也會偵測可能發生的執行階段錯誤,例如將 Integer 指派至 Short。
可能的錯誤
預期外的新變數
您可以撰寫一個沒有宣告區域變數的程序。 下列範例將說明這點。
Function safeSqrt(num)
' Make sure num is positive for square root.
tempVal = Math.Abs(num)
Return Math.Sqrt(tempVal)
End Function
Visual Basic 會自動將 tempVal 建立為區域變數,而您就可以像是先前已經明確宣告一般來使用。 儘管這很方便,但若您輸入的變數名稱有誤,您的程式碼就會出現小錯誤。 假設您已在先前範例中寫入下列程序:
Function safeSqrt(num)
' Make sure num is positive for square root.
tempVal = Math.Abs(num)
Return Math.Sqrt(temVal)
End Function
這程式碼乍看之下並無不同。 但由於 tempVal 變數被錯拼為 Sqrt 的引數,使得編譯器會建立另一個稱為 temVal 的區域變數,因為此變數永遠不會有指派值,所以您的函式永遠都只會傳回零。
預期外的現有項目參考
當 Visual Basic 遇到新名稱時,它無法判斷您是要隱含宣告新變數還是拼錯現有變數的名稱。 因此,它會嘗試以該名稱來建立新變數。 而可能會有變數或其他程式設計項目已經使用該名稱定義,您的程式碼將會在無意之間使用該定義。
您可以使用明確宣告來避免錯誤命名變數。
明確宣告
如果在前述範例中包含 safeSqrt 程序的原始程式檔 (Source File) 已採用明確宣告,Visual Basic 就會將 tempVal 和 temVal 辨認為未宣告的變數,然後針對這兩個變數產生錯誤。 因此,接下來您就要明確宣告 tempVal。 下列範例將說明這點。
Function safeSqrt(ByVal num As Double) As Double
' Make sure num is positive for square root.
Dim tempVal As Double = Math.Abs(num)
Return Math.Sqrt(temVal)
End Function
利用以上修改的程式碼,您可以很快找出問題所在,因為 Visual Basic 會針對拼字有誤的 temVal 顯示錯誤訊息。 由於明確宣告能夠幫助您找出這類錯誤,因此我們建議您的程式碼都使用明確宣告。
注意事項 |
---|
Option Explicit 陳述式是以檔案為基礎而作業的。 它必須出現在每個要強制使用明確變數宣告的原始程式檔開頭。 |