變量、常數(shù)和數(shù)據(jù)類(lèi)型概述
在 Visual Basic 環(huán)境下進(jìn)行計(jì)算時(shí),常常需要臨時(shí)存儲(chǔ)數(shù)據(jù)。例如,可能想要計(jì)算幾個(gè)值,將它們進(jìn)行比較,并根據(jù)比較的結(jié)果對(duì)它們進(jìn)行不同的操作。如果想要比較這些值,就要存儲(chǔ)它們,但不必把它們存入屬性。像大多數(shù)編程語(yǔ)言那樣,Visual Basic 使用變量來(lái)存儲(chǔ)值。變量具有名字(用來(lái)引用該變量所含的值的名詞)和數(shù)據(jù)類(lèi)型(確定變量可以存儲(chǔ)的數(shù)據(jù)的種類(lèi))。數(shù)組可以用來(lái)存儲(chǔ)建立了索引的相關(guān)變量集。
常數(shù)也存儲(chǔ)數(shù)值,顧名思義,在整個(gè)應(yīng)用程序執(zhí)行過(guò)程中,這些值都保持不變。常數(shù)的使用增加了代碼的可讀性,因?yàn)槲覀兛吹降氖蔷哂泻x的名字而不是數(shù)字。Visual Basic 有許多內(nèi)部常數(shù),但也可以建立自定義常數(shù)。
在 Visual Basic 中,數(shù)據(jù)類(lèi)型控制了數(shù)據(jù)的內(nèi)部存儲(chǔ)。按照缺省規(guī)定,VisualBasic 使用了變體數(shù)據(jù)類(lèi)型。在不需要 Variant 提供的靈活性時(shí),還有許多其它可用的數(shù)據(jù)類(lèi)型,它們可用來(lái)優(yōu)化代碼的速度和大小。
變量
在 Visual Basic 中執(zhí)行應(yīng)用程序期間,用變量臨時(shí)存儲(chǔ)數(shù)值。變量具有名字(用來(lái)引用變量所包含的值的詞)和數(shù)據(jù)類(lèi)型(確定變量能夠存儲(chǔ)的數(shù)據(jù)的種類(lèi))。
可以把變量看作內(nèi)存中存放未知值的所在處。例如,假定正在為水果鋪編一個(gè)銷(xiāo)售蘋(píng)果的軟件。在銷(xiāo)售實(shí)際發(fā)生之前并不知道蘋(píng)果的價(jià)格和銷(xiāo)量。此時(shí),可以設(shè)計(jì)兩個(gè)變量來(lái)保存未知數(shù),將它們命名為 ApplePrice 和ApplesSold。每次運(yùn)行程序時(shí),用戶就這兩個(gè)變量提供具體值。為了計(jì)算總的銷(xiāo)售額,并且將結(jié)果顯示在名叫 txtSales 的文本框中,代碼應(yīng)該是這樣的:
txtSales.txt = ApplePrice * ApplesSold
每次根據(jù)用戶提供的數(shù)值,這個(gè)表達(dá)式返回不同的金額。由于有了變量,就可以設(shè)計(jì)一個(gè)算式,而不必事先知道實(shí)際的輸入是多少。
在這個(gè)例子中,ApplePrice 的數(shù)據(jù)類(lèi)型是貨幣,而 ApplesSold 的數(shù)據(jù)類(lèi)型是整數(shù)。變量還可以表示許多其它數(shù)值,比如:文本數(shù)值、日期、各種數(shù)值類(lèi)型,甚至對(duì)象也在此列。
存儲(chǔ)和檢索變量中的數(shù)據(jù)
用賦值語(yǔ)句進(jìn)行計(jì)算,并將結(jié)果賦予變量:
ApplesSold = 10 '將值 10
'傳給變量。
ApplesSold = ApplesSold + 1
'變量值
'增一。
注意,例子中的等號(hào)是賦值符,并不是等于操作符;它將數(shù)值 (10) 賦予變量 (ApplesSold)。
聲明變量
聲明變量就是事先將變量通知程序。要用 Dim 語(yǔ)句聲明變量,Dim 語(yǔ)句提供了變量名:
Dim variablename [As type]
在過(guò)程內(nèi)部用 Dim 語(yǔ)句聲明的變量,只有在該過(guò)程執(zhí)行時(shí)才存在。過(guò)程一結(jié)束,該變量的值也就消失了。此外,過(guò)程中的變量值對(duì)過(guò)程來(lái)說(shuō)是局部的,也就是說(shuō),無(wú)法在一個(gè)過(guò)程中訪問(wèn)另一個(gè)過(guò)程中的變量。由于這些特點(diǎn),在不同過(guò)程中就可使用相同的變量名,而不必?fù)?dān)心有什么沖突和意想不到變故。
變量名:
1.必須以字母開(kāi)頭。
2.不能包含嵌入的(英文)句號(hào)或者嵌入的類(lèi)型聲明字符。
3.不得超過(guò) 255 個(gè)字符。
4.在同一個(gè)范圍內(nèi)必須是唯一的。范圍就是可以引用變量的變化域,如一個(gè)過(guò)程、一個(gè)窗體等等。
由于 Dim 語(yǔ)句中的可選的 As type 子句,可以定義被聲明變量的數(shù)據(jù)類(lèi)型或?qū)ο箢?lèi)型。數(shù)據(jù)類(lèi)型定義了變量所存儲(chǔ)信息的類(lèi)型。String、Integer 和Currency 都是數(shù)據(jù)類(lèi)型的例子。變量也可以包含來(lái)自Visual Basic或其它應(yīng)用程序的對(duì)象。Object、Form1 和 TextBox 都是 Visual Basic 對(duì)象類(lèi)型或類(lèi)的實(shí)例。
詳細(xì)信息 關(guān)于對(duì)象的更詳細(xì)的信息,請(qǐng)參閱第九章“用對(duì)象編程”和第十章“用部件編程”。在本章后面的“數(shù)據(jù)類(lèi)型”部分將詳細(xì)討論數(shù)據(jù)類(lèi)型。聲明變量的其它方式:
不在過(guò)程內(nèi)部,而在窗體、標(biāo)準(zhǔn)或類(lèi)模塊的聲明段聲明變量,這將使變量對(duì)模塊中的所有過(guò)程有效。
用 Public 關(guān)鍵字聲明變量,這將使變量在整個(gè)應(yīng)用程序中有效。
用 Static 關(guān)鍵字聲明一個(gè)局部變量,那么,即使過(guò)程結(jié)束,變量的值也仍然保留著。
隱式聲明
在使用一個(gè)變量之前并不必先聲明這個(gè)變量。 例如,可以書(shū)寫(xiě)這樣一個(gè)函數(shù),在其中就不必在使用變量 TempVal 之前先聲
明它:
Function SafeSqr (num)
TempVal = Abs (num)
SafeSqr = Sqr (TempVal)
End Function
Visual Basic 用這個(gè)名字自動(dòng)創(chuàng)建一個(gè)變量,使用這個(gè)變量時(shí),可以認(rèn)為它就是顯式聲明的。雖然這種方法很方便,但是如果把變量名拼錯(cuò)了的話,會(huì)導(dǎo)致一個(gè)難以查找的錯(cuò)誤。例如,假定寫(xiě)了這樣一個(gè)函數(shù):
Function SafeSqr (num)
TempVal = Abs (num)
SafeSqr = Sqr (TemVal)
End Function
乍看起來(lái),這兩段代碼好像是一樣的。但是因?yàn)樵诘箶?shù)第二行把 TempVal 變量名寫(xiě)錯(cuò)了,所以函數(shù)總是返回 0。當(dāng) Visual Basic 遇到新名字,它分辨不出這是意味著隱式聲明了一個(gè)新變量呢,還是僅僅把一個(gè)現(xiàn)有變量名寫(xiě)錯(cuò)了,于是只好用這個(gè)名字再創(chuàng)建一個(gè)新變量。
顯式聲明
為了避免寫(xiě)錯(cuò)變量名引起的麻煩,可以規(guī)定,只要遇到一個(gè)未經(jīng)明確聲明就當(dāng)成變量的名字,Visual Basic 都發(fā)出錯(cuò)誤警告?! ∫@式聲明變量,請(qǐng)
在類(lèi)模塊、窗體模塊或標(biāo)準(zhǔn)模塊的聲明段中加入這個(gè)語(yǔ)句:
Option Explicit
-或-
在“工具”菜單中選取“選項(xiàng)”,單擊“編輯器”選項(xiàng)卡,再?gòu)?fù)選“要求變量聲明”選項(xiàng)。這樣就在任何新模塊中自動(dòng)插入 Option Explicit 語(yǔ)句,但不會(huì)在已經(jīng)建立起來(lái)的模塊中自動(dòng)插入;所以在工程內(nèi)部,只能用手工方法向現(xiàn)有模塊添加 Option Explicit。
如果對(duì)包含 SafeSqr 函數(shù)的窗體或標(biāo)準(zhǔn)模塊執(zhí)行該語(yǔ)句,那么 Visual Basic將認(rèn)定 TempVal 和 TemVal 都是未經(jīng)聲明變量,并為兩者都發(fā)出錯(cuò)誤信息。隨后就可以顯式聲明 TempVal。
Function SafeSqr (num)
Dim TempVal
TempVal = Abs (num)
SafeSqr = Sqr (TemVal)
End Function
因?yàn)?Visual Basic 對(duì)拼錯(cuò)了的 TemVal 顯示錯(cuò)誤信息,所以能夠立刻明白是什么問(wèn)題。由于 Option Explicit 語(yǔ)句有助于抓住這些類(lèi)型的錯(cuò)誤,所以最好在所有代碼中使用它。
注意 Option Explicit 語(yǔ)句的作用范圍僅限于語(yǔ)句所在模塊,所以,對(duì)每個(gè)需要 Visual Basic 強(qiáng)制顯式變量聲明的窗體模塊、標(biāo)準(zhǔn)模塊及類(lèi)模塊,必須將 Option Explicit 語(yǔ)句放在這些模塊的聲明段中。如果選擇“要求變量聲明”,Visual Basic 會(huì)在后續(xù)的窗體模塊、標(biāo)準(zhǔn)模塊及類(lèi)模塊中自動(dòng)插入 Option Explicit,但是不會(huì)將它加入到現(xiàn)有代碼中。必須在工程中通過(guò)手工將 Option Explicit 語(yǔ)句加到任何現(xiàn)有模塊中。
理解變量的范圍
變量的范圍確定了能夠知曉該變量存在的那部分代碼。在一個(gè)過(guò)程內(nèi)部聲明變量時(shí),只有過(guò)程內(nèi)部的代碼才能訪問(wèn)或改變那個(gè)變量的值;它有一個(gè)范圍,對(duì)該過(guò)程來(lái)說(shuō)是局部的。但是,有時(shí)需要使用具有更大范圍的變量,例如這樣一個(gè)變量,其值對(duì)于同一模塊內(nèi)的所有過(guò)程都有效,甚至對(duì)于整個(gè)應(yīng)用程序的所有過(guò)程都有效。Visual Basic 允許在聲明變量時(shí)指定它的范圍。
指定變量的有效范圍
一個(gè)變量在劃定范圍時(shí)被看作是過(guò)程級(jí)(局部)變量,還是模塊級(jí)變量,這取決于聲明該變量時(shí)采用的方式。
聯(lián)系客服