常數
經常會發現代碼包含一些常數值,它們一次又一次地反復出現。還可發現,代碼要用到很難記住的數字,而那些數字沒有明確意義。
在這些情況下,可用常數大幅度地改進代碼的可讀性和可維護性。常數是有意義的名字,取代永遠不變的數值或字符串。盡管常數有點像變量,但不能像對變量那樣修改常數,也不能對常數賦以新值。常數有兩種來源:
1.內部的或系統定義的常數是應用程序和控件提供的。在“對象浏覽器”中的 Visual Basic ( VB ) 、和 Visual Basic for applications ( VBA ) 對象庫中列舉了 Visual Basic 的常數。其它提供對象庫的應用程序,如Microsoft Excel 和 Microsoft Project,也提供了常數列表,這些常數可與應用程序的對象、方法和屬性一起使用。在每個 ActiveX 控件的對象庫中也定義了常數。關於使用“對象浏覽器”的詳細信息,請參閱第九章“用對象編程”。
2.符號的或用戶定義的常數是用 Const 語句來聲明的。下節“創建屬於自己的常數”中將說明用戶定義的常數。
在 Visual Basic 中,常數名采用大小寫混合的格式,其前綴表示定義常數的對象庫名。來自 Visual Basic 和 Visual Basic for applications 對象庫的常數以 "vb" 開頭,例如vbTileHorizontal。
設計前綴時應盡力防止發生意外沖突,不能出現常數名稱相同但表示不同數值的情況。即使使用了前綴,兩個對象庫也仍可能包含表示不同值的相同常數。在這種情況下,引用哪個常數取決於哪個對象庫具有更高的優先級。關於改變對象庫優先級的信息,請參閱 “引用對話框”部分。
為了絕對確保不發生常數名字沖突,可用以下語法來限定對常數的引用:
[libname.][modulename.]constname
Libname 通常是控件或庫的類名。Modulename 是定義常數的模塊的名字。Constname 是常數名。在對象庫中定義了每個元素,並能在“對象浏覽器”中查看元素。
創建屬於自己的常數
聲明常數的語法是:
[Public|Private] Const constantname[As type] = expression
參數 constantname 是有效的符號名(其規則與建立變量名的規則一樣),expression 由數值常數或字符串常數以及運算符組成;但在 expression 中不能使用函數調用。
Const 語句可以表示數量、日期和時間:
Const conPi = 3.14159265358979
Public Const conMaxPlanets As Integer = 9
Const conReleaseDate = #1/1/95#
也可用 Const 語句定義字符串常數:
Public Const conVersion = "07.10.A"
Const conCodeName = "Enigma"
如果用逗號進行分隔,則在一行中可放置多個常數聲明:
Public Const conPi = 3.14, conMaxPlanets = 9, _
conWorldPop = 6E+09
等號 ( = ) 右邊的表達式往往是數字或文字串,但也可以是其結果為數或字符串的表達式(盡管表達式不能包含函數調用)。甚至可用先前定義過的常數定義新常數。
Const conPi2 = conPi * 2一旦已定義常數,就可將其放置在代碼中,使代碼更可讀。例如:
Static SolarSystem (1 To conMaxPlanets)
If numPeople > conWorldPop Then Exit Sub
設定用戶自定義常數的范圍
和變量聲明一樣, Const 語句也有范圍,也使用相同的規則:
為創建僅存在於過程中的常數,請在這個過程內部聲明常數。
為創建一常數,它對模塊中所有過程都有效,但對模塊之外任何代碼都無效,請在模塊的聲明段中聲明常數。
為創建在整個應用程序中有效的常數,請在標准模塊的聲明段中進行聲明,並在 Const 前面放置 Public 關鍵字。在窗體模塊或類模塊中不能聲明 Public 常數。
詳細信息 關於范圍的更詳細信息,請參閱本章前面的“理解變量的范圍”一節.
避免循環引用
由於常數可以用其它常數定義,因此必須小心,在兩個以上常數之間不要出現循環或循環引用。當程序中有兩個以上的公用常數,而且每個公用常數都用另一個去定義時就會出現循環 。例如:
'在 Module1 中:
Public Const conA = conB * 2 '在整個應用程序
'中有效。
'在 Module 2:
Public Const conB = conA / 2 '在整個應用程序
'中有效。
如果出現循環,在試圖運行此應用程序時,Visual Basic 就會產生錯誤信息。不解決循環引用就不能運行程序。為避免出現循環,可將公共常數限制在單一模塊內,或最多只存在於少數幾個模塊內。
數據類型
變量是用來存儲值的所在處,它有名字和數據類型。變量的數據類型決定了如何將代表這些值的位存儲到計算機的內存中。在聲明變量時也可指定它的數據類型。所有變量都具有數據類型,以決定能夠存儲哪種數據。
根據缺省規定,如果在聲明中沒有說明數據類型,則令變量的數據類型為Variant。Variant 數據類型很像一條變色龍,它可在不同場合代表不同數據類型。當指定變量為 Variant 變量時,不必在數據類型之間進行轉換,VisualBasic 會自動完成各種必要的轉換。
但是,如果知道變量確實總是存儲特定類型的數據,並且還聲明了這種特定類型的變量,則 Visual Basic 會以更高的效率處理這個數據。例如,存儲人名的變量最好表示成 String 數據類型,因為名字總是由字符組成。
除變量外,數據類型也用於其它場合。在給屬性賦值時,這個值就有數據類型;函數的參數也有數據類型。事實上,在 Visual Basic 中,凡是與數據有關的東西就與數據類型有關。
你也可聲明任何基本類型的數組。
詳細信息 關於更詳細信息,請參閱本章後面的“數組”部分。在第十五章“性能和兼容性的設計”中還將討論通過選擇數據類型來提高應用程序的性能。
聲明帶數據類型的變量
在使用非 Variant 變量之前,必須使用 Private、Public、Dim 或 Static 語句將變量聲明為 As type。例如,下列語句分別聲明了 Integer、Double、String和 Currency 類型的變量:
Private I As Integer
Dim Amt As Double
Static YourName As String
Public BillsPaid As Currency
一個聲明語句可將多個聲明組合起來,請看下列語句:
Private I As Integer,Amt As Double
Private YourName As String,BillsPaid As Currency
Private Test,Amount,J As Integer
注意 如果不提供數據類型,則指定變量為缺省類型。在上例中,變量 Test和 Amount 是 Variant 數據類型。如果由於其它編程語言的經驗使你感到同一個聲明語句中的所有變量都有相同的指定數據類型(此例中為 Integer),那麼,此處的結果可能會令人感到新鮮。