常數(shù)
經(jīng)常會(huì)發(fā)現(xiàn)代碼包含一些常數(shù)值,它們一次又一次地反復(fù)出現(xiàn)。還可發(fā)現(xiàn),代碼要用到很難記住的數(shù)字,而那些數(shù)字沒有明確意義。
在這些情況下,可用常數(shù)大幅度地改進(jìn)代碼的可讀性和可維護(hù)性。常數(shù)是有意義的名字,取代永遠(yuǎn)不變的數(shù)值或字符串。盡管常數(shù)有點(diǎn)像變量,但不能像對(duì)變量那樣修改常數(shù),也不能對(duì)常數(shù)賦以新值。常數(shù)有兩種來源:
1.內(nèi)部的或系統(tǒng)定義的常數(shù)是應(yīng)用程序和控件提供的。在“對(duì)象瀏覽器”中的 Visual Basic ( VB ) 、和 Visual Basic for applications ( VBA ) 對(duì)象庫(kù)中列舉了 Visual Basic 的常數(shù)。其它提供對(duì)象庫(kù)的應(yīng)用程序,如Microsoft Excel 和 Microsoft Project,也提供了常數(shù)列表,這些常數(shù)可與應(yīng)用程序的對(duì)象、方法和屬性一起使用。在每個(gè) ActiveX 控件的對(duì)象庫(kù)中也定義了常數(shù)。關(guān)于使用“對(duì)象瀏覽器”的詳細(xì)信息,請(qǐng)參閱第九章“用對(duì)象編程”。
2.符號(hào)的或用戶定義的常數(shù)是用 Const 語(yǔ)句來聲明的。下節(jié)“創(chuàng)建屬于自己的常數(shù)”中將說明用戶定義的常數(shù)。
在 Visual Basic 中,常數(shù)名采用大小寫混合的格式,其前綴表示定義常數(shù)的對(duì)象庫(kù)名。來自 Visual Basic 和 Visual Basic for applications 對(duì)象庫(kù)的常數(shù)以 "vb" 開頭,例如vbTileHorizontal。
設(shè)計(jì)前綴時(shí)應(yīng)盡力防止發(fā)生意外沖突,不能出現(xiàn)常數(shù)名稱相同但表示不同數(shù)值的情況。即使使用了前綴,兩個(gè)對(duì)象庫(kù)也仍可能包含表示不同值的相同常數(shù)。在這種情況下,引用哪個(gè)常數(shù)取決于哪個(gè)對(duì)象庫(kù)具有更高的優(yōu)先級(jí)。關(guān)于改變對(duì)象庫(kù)優(yōu)先級(jí)的信息,請(qǐng)參閱 “引用對(duì)話框”部分。
為了絕對(duì)確保不發(fā)生常數(shù)名字沖突,可用以下語(yǔ)法來限定對(duì)常數(shù)的引用:
[libname.][modulename.]constname
Libname 通常是控件或庫(kù)的類名。Modulename 是定義常數(shù)的模塊的名字。Constname 是常數(shù)名。在對(duì)象庫(kù)中定義了每個(gè)元素,并能在“對(duì)象瀏覽器”中查看元素。
創(chuàng)建屬于自己的常數(shù)
聲明常數(shù)的語(yǔ)法是:
[Public|Private] Const constantname[As type] = expression
參數(shù) constantname 是有效的符號(hào)名(其規(guī)則與建立變量名的規(guī)則一樣),expression 由數(shù)值常數(shù)或字符串常數(shù)以及運(yùn)算符組成;但在 expression 中不能使用函數(shù)調(diào)用。
Const 語(yǔ)句可以表示數(shù)量、日期和時(shí)間:
Const conPi = 3.14159265358979
Public Const conMaxPlanets As Integer = 9
Const conReleaseDate = #1/1/95#
也可用 Const 語(yǔ)句定義字符串常數(shù):
Public Const conVersion = "07.10.A"
Const conCodeName = "Enigma"
如果用逗號(hào)進(jìn)行分隔,則在一行中可放置多個(gè)常數(shù)聲明:
Public Const conPi = 3.14, conMaxPlanets = 9, _
conWorldPop = 6E+09
等號(hào) ( = ) 右邊的表達(dá)式往往是數(shù)字或文字串,但也可以是其結(jié)果為數(shù)或字符串的表達(dá)式(盡管表達(dá)式不能包含函數(shù)調(diào)用)。甚至可用先前定義過的常數(shù)定義新常數(shù)。
Const conPi2 = conPi * 2一旦已定義常數(shù),就可將其放置在代碼中,使代碼更可讀。例如:
Static SolarSystem (1 To conMaxPlanets)
If numPeople > conWorldPop Then Exit Sub
設(shè)定用戶自定義常數(shù)的范圍
和變量聲明一樣, Const 語(yǔ)句也有范圍,也使用相同的規(guī)則:
為創(chuàng)建僅存在于過程中的常數(shù),請(qǐng)?jiān)谶@個(gè)過程內(nèi)部聲明常數(shù)。
為創(chuàng)建一常數(shù),它對(duì)模塊中所有過程都有效,但對(duì)模塊之外任何代碼都無效,請(qǐng)?jiān)谀K的聲明段中聲明常數(shù)。
為創(chuàng)建在整個(gè)應(yīng)用程序中有效的常數(shù),請(qǐng)?jiān)跇?biāo)準(zhǔn)模塊的聲明段中進(jìn)行聲明,并在 Const 前面放置 Public 關(guān)鍵字。在窗體模塊或類模塊中不能聲明 Public 常數(shù)。
詳細(xì)信息 關(guān)于范圍的更詳細(xì)信息,請(qǐng)參閱本章前面的“理解變量的范圍”一節(jié).
避免循環(huán)引用
由于常數(shù)可以用其它常數(shù)定義,因此必須小心,在兩個(gè)以上常數(shù)之間不要出現(xiàn)循環(huán)或循環(huán)引用。當(dāng)程序中有兩個(gè)以上的公用常數(shù),而且每個(gè)公用常數(shù)都用另一個(gè)去定義時(shí)就會(huì)出現(xiàn)循環(huán) 。例如:
'在 Module1 中:
Public Const conA = conB * 2 '在整個(gè)應(yīng)用程序
'中有效。
'在 Module 2:
Public Const conB = conA / 2 '在整個(gè)應(yīng)用程序
'中有效。
如果出現(xiàn)循環(huán),在試圖運(yùn)行此應(yīng)用程序時(shí),Visual Basic 就會(huì)產(chǎn)生錯(cuò)誤信息。不解決循環(huán)引用就不能運(yùn)行程序。為避免出現(xiàn)循環(huán),可將公共常數(shù)限制在單一模塊內(nèi),或最多只存在于少數(shù)幾個(gè)模塊內(nèi)。
數(shù)據(jù)類型
變量是用來存儲(chǔ)值的所在處,它有名字和數(shù)據(jù)類型。變量的數(shù)據(jù)類型決定了如何將代表這些值的位存儲(chǔ)到計(jì)算機(jī)的內(nèi)存中。在聲明變量時(shí)也可指定它的數(shù)據(jù)類型。所有變量都具有數(shù)據(jù)類型,以決定能夠存儲(chǔ)哪種數(shù)據(jù)。
根據(jù)缺省規(guī)定,如果在聲明中沒有說明數(shù)據(jù)類型,則令變量的數(shù)據(jù)類型為Variant。Variant 數(shù)據(jù)類型很像一條變色龍,它可在不同場(chǎng)合代表不同數(shù)據(jù)類型。當(dāng)指定變量為 Variant 變量時(shí),不必在數(shù)據(jù)類型之間進(jìn)行轉(zhuǎn)換,VisualBasic 會(huì)自動(dòng)完成各種必要的轉(zhuǎn)換。
經(jīng)常會(huì)發(fā)現(xiàn)代碼包含一些常數(shù)值,它們一次又一次地反復(fù)出現(xiàn)。還可發(fā)現(xiàn),代碼要用到很難記住的數(shù)字,而那些數(shù)字沒有明確意義。
在這些情況下,可用常數(shù)大幅度地改進(jìn)代碼的可讀性和可維護(hù)性。常數(shù)是有意義的名字,取代永遠(yuǎn)不變的數(shù)值或字符串。盡管常數(shù)有點(diǎn)像變量,但不能像對(duì)變量那樣修改常數(shù),也不能對(duì)常數(shù)賦以新值。常數(shù)有兩種來源:
1.內(nèi)部的或系統(tǒng)定義的常數(shù)是應(yīng)用程序和控件提供的。在“對(duì)象瀏覽器”中的 Visual Basic ( VB ) 、和 Visual Basic for applications ( VBA ) 對(duì)象庫(kù)中列舉了 Visual Basic 的常數(shù)。其它提供對(duì)象庫(kù)的應(yīng)用程序,如Microsoft Excel 和 Microsoft Project,也提供了常數(shù)列表,這些常數(shù)可與應(yīng)用程序的對(duì)象、方法和屬性一起使用。在每個(gè) ActiveX 控件的對(duì)象庫(kù)中也定義了常數(shù)。關(guān)于使用“對(duì)象瀏覽器”的詳細(xì)信息,請(qǐng)參閱第九章“用對(duì)象編程”。
2.符號(hào)的或用戶定義的常數(shù)是用 Const 語(yǔ)句來聲明的。下節(jié)“創(chuàng)建屬于自己的常數(shù)”中將說明用戶定義的常數(shù)。
在 Visual Basic 中,常數(shù)名采用大小寫混合的格式,其前綴表示定義常數(shù)的對(duì)象庫(kù)名。來自 Visual Basic 和 Visual Basic for applications 對(duì)象庫(kù)的常數(shù)以 "vb" 開頭,例如vbTileHorizontal。
設(shè)計(jì)前綴時(shí)應(yīng)盡力防止發(fā)生意外沖突,不能出現(xiàn)常數(shù)名稱相同但表示不同數(shù)值的情況。即使使用了前綴,兩個(gè)對(duì)象庫(kù)也仍可能包含表示不同值的相同常數(shù)。在這種情況下,引用哪個(gè)常數(shù)取決于哪個(gè)對(duì)象庫(kù)具有更高的優(yōu)先級(jí)。關(guān)于改變對(duì)象庫(kù)優(yōu)先級(jí)的信息,請(qǐng)參閱 “引用對(duì)話框”部分。
為了絕對(duì)確保不發(fā)生常數(shù)名字沖突,可用以下語(yǔ)法來限定對(duì)常數(shù)的引用:
[libname.][modulename.]constname
Libname 通常是控件或庫(kù)的類名。Modulename 是定義常數(shù)的模塊的名字。Constname 是常數(shù)名。在對(duì)象庫(kù)中定義了每個(gè)元素,并能在“對(duì)象瀏覽器”中查看元素。
創(chuàng)建屬于自己的常數(shù)
聲明常數(shù)的語(yǔ)法是:
[Public|Private] Const constantname[As type] = expression
參數(shù) constantname 是有效的符號(hào)名(其規(guī)則與建立變量名的規(guī)則一樣),expression 由數(shù)值常數(shù)或字符串常數(shù)以及運(yùn)算符組成;但在 expression 中不能使用函數(shù)調(diào)用。
Const 語(yǔ)句可以表示數(shù)量、日期和時(shí)間:
Const conPi = 3.14159265358979
Public Const conMaxPlanets As Integer = 9
Const conReleaseDate = #1/1/95#
也可用 Const 語(yǔ)句定義字符串常數(shù):
Public Const conVersion = "07.10.A"
Const conCodeName = "Enigma"
如果用逗號(hào)進(jìn)行分隔,則在一行中可放置多個(gè)常數(shù)聲明:
Public Const conPi = 3.14, conMaxPlanets = 9, _
conWorldPop = 6E+09
等號(hào) ( = ) 右邊的表達(dá)式往往是數(shù)字或文字串,但也可以是其結(jié)果為數(shù)或字符串的表達(dá)式(盡管表達(dá)式不能包含函數(shù)調(diào)用)。甚至可用先前定義過的常數(shù)定義新常數(shù)。
Const conPi2 = conPi * 2一旦已定義常數(shù),就可將其放置在代碼中,使代碼更可讀。例如:
Static SolarSystem (1 To conMaxPlanets)
If numPeople > conWorldPop Then Exit Sub
設(shè)定用戶自定義常數(shù)的范圍
和變量聲明一樣, Const 語(yǔ)句也有范圍,也使用相同的規(guī)則:
為創(chuàng)建僅存在于過程中的常數(shù),請(qǐng)?jiān)谶@個(gè)過程內(nèi)部聲明常數(shù)。
為創(chuàng)建一常數(shù),它對(duì)模塊中所有過程都有效,但對(duì)模塊之外任何代碼都無效,請(qǐng)?jiān)谀K的聲明段中聲明常數(shù)。
為創(chuàng)建在整個(gè)應(yīng)用程序中有效的常數(shù),請(qǐng)?jiān)跇?biāo)準(zhǔn)模塊的聲明段中進(jìn)行聲明,并在 Const 前面放置 Public 關(guān)鍵字。在窗體模塊或類模塊中不能聲明 Public 常數(shù)。
詳細(xì)信息 關(guān)于范圍的更詳細(xì)信息,請(qǐng)參閱本章前面的“理解變量的范圍”一節(jié).
避免循環(huán)引用
由于常數(shù)可以用其它常數(shù)定義,因此必須小心,在兩個(gè)以上常數(shù)之間不要出現(xiàn)循環(huán)或循環(huán)引用。當(dāng)程序中有兩個(gè)以上的公用常數(shù),而且每個(gè)公用常數(shù)都用另一個(gè)去定義時(shí)就會(huì)出現(xiàn)循環(huán) 。例如:
'在 Module1 中:
Public Const conA = conB * 2 '在整個(gè)應(yīng)用程序
'中有效。
'在 Module 2:
Public Const conB = conA / 2 '在整個(gè)應(yīng)用程序
'中有效。
如果出現(xiàn)循環(huán),在試圖運(yùn)行此應(yīng)用程序時(shí),Visual Basic 就會(huì)產(chǎn)生錯(cuò)誤信息。不解決循環(huán)引用就不能運(yùn)行程序。為避免出現(xiàn)循環(huán),可將公共常數(shù)限制在單一模塊內(nèi),或最多只存在于少數(shù)幾個(gè)模塊內(nèi)。
數(shù)據(jù)類型
變量是用來存儲(chǔ)值的所在處,它有名字和數(shù)據(jù)類型。變量的數(shù)據(jù)類型決定了如何將代表這些值的位存儲(chǔ)到計(jì)算機(jī)的內(nèi)存中。在聲明變量時(shí)也可指定它的數(shù)據(jù)類型。所有變量都具有數(shù)據(jù)類型,以決定能夠存儲(chǔ)哪種數(shù)據(jù)。
根據(jù)缺省規(guī)定,如果在聲明中沒有說明數(shù)據(jù)類型,則令變量的數(shù)據(jù)類型為Variant。Variant 數(shù)據(jù)類型很像一條變色龍,它可在不同場(chǎng)合代表不同數(shù)據(jù)類型。當(dāng)指定變量為 Variant 變量時(shí),不必在數(shù)據(jù)類型之間進(jìn)行轉(zhuǎn)換,VisualBasic 會(huì)自動(dòng)完成各種必要的轉(zhuǎn)換。

