常數
經常會發現程式碼包含一些常數值,它們一次又一次地反覆出現。也可發現,程式碼要用到很難記住的數字,而那些數字沒有明確意義。
在這些情況下,可用常數大幅改善程式碼的可讀性和可維護性。常數是有意義的名字,取代永遠不變的數值或字串。儘管常數有點像變量,但不能像對變量那樣修改常數,也不能對常數賦以新值。常數有兩種來源:
1.內部的或系統定義的常數是應用程式和控制項提供的。在「物件瀏覽器」中的VisualBasic(VB)、和VisualBasicforapplications(VBA)物件庫中列舉了VisualBasic的常數。其它提供物件庫的應用程序,如MicrosoftExcel和MicrosoftPRoject,也提供了常數列表,這些常數可與應用程式的物件、方法和屬性一起使用。在每個ActiveX控制項的物件庫中也定義了常數。關於使用“對象瀏覽器”的詳細信息,請參閱第九章“用對象編程”。
2.符號的或使用者定義的常數是用Const語句來聲明的。下節「建立屬於自己的常數」中將說明使用者定義的常數。
在VisualBasic中,常數名採用大小寫混合的格式,其前綴表示定義常數的物件庫名。來自VisualBasic和VisualBasicforapplications物件庫的常數以vb開頭,例如vbTileHorizontal。
設計前綴時應盡力防止意外衝突,且不能出現常數名稱相同但表示不同數值的情況。即使使用了前綴,兩個物件庫也可能包含表示不同值的相同常數。在這種情況下,引用哪個常數取決於哪個物件庫具有更高的優先權。關於改變物件庫優先權的信息,請參閱「引用對話方塊」部分。
為了絕對確保不會發生常數名字衝突,可用以下語法來限定對常數的引用:
[libname.][modulename.]constname
Libname通常是控製或庫的類別名稱。 Modulename是定義常數的模組的名稱。 Constname是常數名。在物件庫中定義了每個元素,並能在「物件瀏覽器」中查看元素。
創造屬於自己的常數
聲明常數的語法是:
[Public|Private]Constconstantname[Astype]=expression
參數constantname是有效的符號名稱(其規則與建立變數名稱的規則一樣),expression由數值常數或字串常數以及運算子組成;但在expression中不能使用函數呼叫。
Const語句可以表示數量、日期和時間:
ConstconPi=3.14159265358979
PublicConstconMaxPlanetsAsInteger=9
ConstconReleaseDate=#1/1/95#
也可用Const語句定義字串常數:
PublicConstconVersion=07.10.A
ConstconCodeName=Enigma
如果用逗號進行分隔,則在一行中可放置多個常數聲明:
PublicConstconPi=3.14,conMaxPlanets=9,_
conWorldPop=6E 09
等號(=)右邊的表達式往往是數字或文字串,但也可以是其結果為數或字串的表達式(儘管表達式不能包含函數呼叫)。甚至可用先前定義過的常數定義新常數。
ConstconPi2=conPi*2一旦定義常數,就可將其放置在程式碼中,使程式碼更可讀。例如:
StaticSolarSystem(1ToconMaxPlanets)
IfnumPeople>conWorldPopThenExitSub
設定使用者自訂常數的範圍
和變數宣告一樣,Const語句也有範圍,也使用相同的規則:
為建立僅存在於過程中的常數,請在這個過程內部聲明常數。
為創建一常數,它對模組中所有過程都有效,但對模組之外任何程式碼都無效,請在模組的聲明段中聲明常數。
若要建立在整個應用程式中有效的常數,請在標準模組的聲明段中進行聲明,並在Const前面放置Public關鍵字。在窗體模組或類別模組中不能聲明Public常數。
詳細資訊關於範圍的更詳細信息,請參閱本章前面的“理解變數的範圍”一節.
避免循環引用
由於常數可以用其它常數定義,因此必須小心,在兩個以上常數之間不要出現循環或循環引用。當程式中有兩個以上的公用常數,而且每個公用常數都用另一個去定義時就會出現循環。例如:
'在Module1中:
PublicConstconA=conB*2 '在整個應用程式
'中有效。
'在Module2:
PublicConstconB=conA/2 '在整個應用程式
'中有效。
如果出現循環,在嘗試執行此應用程式時,VisualBasic就會產生錯誤訊息。不解決循環引用就不能運行程式。為避免循環,可將公共常數限制在單一模組內,或最多只存在於少數幾個模組內。
資料類型
變數是用來儲存值的所在處,它有名字和資料類型。變數的資料類型決定如何將代表這些值的位元儲存到電腦的記憶體中。在宣告變數時也可指定它的資料型態。所有變數都具有資料類型,以決定能夠儲存哪種資料。
根據缺省規定,如果在聲明中沒有說明資料類型,則令變數的資料類型為Variant。 Variant資料型別很像一條變色龍,它可在不同場合代表不同資料型別。當指定變數為Variant變數時,不必在資料型別之間轉換,VisualBasic會自動完成各種必要的轉換。
但是,如果知道變數確實總是儲存特定類型的數據,並且還聲明了這種特定類型的變量,則VisualBasic會以更高的效率處理這個數據。例如,儲存人名的變數最好表示成String資料類型,因為名字總是由字元組成。
除變數外,資料類型也用於其它場合。在給屬性賦值時,這個值就有資料型態;函數的參數也有資料型態。事實上,在VisualBasic中,凡是與資料有關的東西就與資料類型有關。
你也可聲明任何基本類型的陣列。
詳細資訊關於更詳細信息,請參閱本章後面的“數組”部分。在第十五章「效能和相容性的設計」中也將討論透過選擇資料類型來提高應用程式的效能。
聲明帶資料類型的變數
在使用非Variant變數之前,必須使用Private、Public、Dim或Static語句將變數宣告為Astype。例如,下列語句分別宣告了Integer、Double、String和Currency類型的變數:
PrivateIAsInteger
DimAmtAsDouble
StaticYourNameAsString
PublicBillsPaidAsCurrency
一個聲明語句可將多個聲明組合起來,請看下列語句:
PrivateIAsInteger,AmtAsDouble
PrivateYourNameAsString,BillsPaidAsCurrency
PrivateTest,Amount,JAsInteger
注意如果不提供資料類型,則指定變數為預設類型。在上例中,變數Test和Amount是Variant資料類型。如果由於其它程式語言的經驗使你感覺到同一個宣告語句中的所有變數都有相同的指定資料類型(此例中為Integer),那麼,這裡的結果可能會令人感到新鮮。
Numeric資料類型
VisualBasic支援幾種Numeric資料類型:Integer(整型)、Long(長整型)、Single(單精確度浮點型)、Double(雙精確度浮點型)和Currency(貨幣型)。與Variant類型相比,Numeric類型佔用的儲存空間通常要少。
如果知道變數總是存放整數(如12)而不是帶有小數點的數字(如3.57),就應將它宣告為Integer類型或Long類型。整數的運算速度較快,而且比其它資料型別佔據的記憶體少。在For...Next循環內作為計數器變數使用時,整數類型特別有用。
詳細資訊關於控制結構的詳細資料,請參閱本章後面的「控制結構概述」。如果變數包含小數,則可將它們宣告為Single、Double或Currency變數。 Currency資料型別支援小數點右面4位和小數點左面15位;它是精確的定點資料類型,適用於貨幣計算。浮點(Single和Double)數比Currency的有效範圍大得多,但有可能產生小的進位誤差。
注意浮點數值可表示為mmmEeee或mmmDeee,其中mmm是尾數,而eee是指數(以10為底的冪)。 Single資料型態的最大正數值為3.402823E 38,或3.4乘以10的38次方;Double資料型態的最大正數值為1.79769313486232D 308或1.8乘以10的308次方。用D將數值文字中的尾數部分和指數部分分開,就會導致將該值作為Double資料型別來處理。同樣,用這種方式使用E,也會導致將該值作為Single資料類型來處理。
Byte資料型
如果變數包含二進制數,則將它宣告為Byte資料類型的陣列(本章後面的「陣列」中將討論陣列)。在轉換格式期間以Byte變數儲存二進位資料就可保留資料。當String變數在ANSI和Unicode格式間進行轉換時,變數中的任何二進位資料都會遭到破壞。在下列任何一種情況下,VisualBasic都會自動在ANSI和Unicode之間進行轉換:
讀文件時
寫文件時
呼叫DLL時
呼叫物件的方法和屬性時
除一元減法外,所有可對整數進行操作的運算子均可操作Byte資料型態。因為Byte是從0-255的無符號類型,所以不能表示負數。因此,在進行一元減法運算時,VisualBasic首先將Byte轉換為符號整數。
所有數值變數都可互相賦值,也可對Variant類型變數賦值。在將浮點數賦予整數之前,VisualBasic要將浮點數的小數部分四捨五入,而不是將小數部分去掉。
詳細資訊關於Unicode和ANSI轉換的詳細信息,請參閱第十六章「國際化」。
String資料類型
如果變數總是包含字串而從不包含數值,就可將其宣告為String類型。
PrivateSAsString
然後可將字串賦予這個變量,並用字串函數對它進行操作。
S=Database
S=Left(S,4)
依照預設規定,String變數或參數是一個可變長度的字串。隨著對字串賦予新數據,它的長度可增可減。也可以聲明字串具有固定長度。可用以下語法宣告一個定長字串:
String*size
例如,為了宣告一個長度為50字元的字串,可用下列語句:
DimEmpNameAsString*50
如果賦予字串的字元少於50個,則用空格將EmpName的不足部分填滿。如果賦予字串的長度太長,已不能成為定長字串,則VisualBasic會直接截去超出部分的字元。
因為定長字串用空格填充尾部多餘的空間,所以在處理定長字串時可發現,刪除空格的Trim和RTrim函數是很有用的。 可將標準模組中的定長字串聲明為Public或Private。在窗體和類別模組中,必須將定長字串宣告為Private。
詳細資訊請參閱《VisualBasic6.0語言參考手冊》中的「Ltrim、RTrim和Trim函數」。
交換字串和數字
如果字串表示數值,則可將字串賦予數值變數。也可將數值賦予字串變數。例如,將命令按鈕、文字方塊和列錶框放置在窗體中。在命令按鈕的Click事件中輸入下列程式碼。運行應用程式並點擊命令按鈕。
PrivateSubCommand1_Click()
DimintXAsInteger
DimstrYAsString
strY=100.23
intX=strY '將字串傳遞給數值變數。
List1.AddItemCos(strY) '將字串中數值的餘弦值。
'新增到列錶框中。
strY=Cos(strY) '將餘弦值傳遞給字串變數。
Text1.Text=strY '在文字方塊中顯示字串。
EndSub
VisualBasic會自動強制變數為適當的資料型態。在轉換字串和數值時要小心;如果傳送字串中的值不是數值,則在執行時會出錯。
Boolean資料類型
若變數的值只是「true/false」、「yes/no」、「on/off」訊息,則可將它宣告為Boolean類型。 Boolean的預設值為False。在下面的例子中,blnRunning是Boolean變量,儲存簡單的yes/no設定。
DimblnRunningAsBoolean
'檢查磁帶是否在轉動。
IfRecorder.Direction=1Then
blnRunning=True
Endif
Date資料型
Date和Time值既可包含在特定的Date資料類型中,又可包含在Variant變數中。一般的Date特性適用於這兩種類型。
詳細資訊請參閱《連線手冊》的「進階變數主題」中的「在Variant變數中儲存Date/Time值」部分。
當其它數值資料型別轉換為Date時,小數點左邊的值表示Date訊息,小數點右邊的值則代表Time。午夜為0,正午為0.5。負數表示西元1899年12月31日之前的Date。
->