VB.net的變數與資料型別

「變數」是什麼?我們國中都學過一元一次方程式,常常會設一個未知數(如:X),那個未知數就是一個變數,可以在範圍內自由改變其值的數。在電腦程式裡,變數的定義跟在數學上有點不一樣。程式裡的變數定義為:可以修改儲存記憶體內容的命名空間。跟數學變數最大的不同就是,程式的變數存放的不一定是數值(其實還是以數值的方式儲存),也可以是文字,這些類型的不同就稱為「資料型別」。變數就像一個儲藏箱一樣,程式設計者可以把一些要用到的數值或是字元字串,丟到裡面儲存。

宣告變數

任何程式,不管是什麼語言,都會使用變數,通常用來儲存暫時的資料。使用變數前須先做個「宣告」的動作。其目的在於告訴電腦你指定了這個符號當做一個記憶體空間,你可以自由更改這塊記憶體儲存的內容。

變數宣告的程式語法為:

Dim 變數名稱一 As 資料型別 [=初始值一] [,變數名稱二 As 資料型別 [=初始值二]],……]

光是看上面的語法格式可能會霧煞煞,先來舉個最簡單的例子:

Dim I As Integer ‘宣告變數I為整數變數

加上初始值:

Dim I As Integer = 123 ‘宣告變數I為整數變數,且剛開始儲存的數值為123

同時宣告兩個以上的變數:

Dim A As Integer = 10, B As Integer = 50, C As String = “Pc No Problem”

變數的命名規則

變數的名稱可以隨程式設計者自由決定,看你是要用A,B,C還是D,都可以。但命名時須遵守一些規則,以免程式編譯時會產生錯誤。以下幾點要注意:

  • 變數名稱的第一個字母必須是大小寫字母、_、中文。不過建議不要用中文來命名變數,可能會造成一些編碼上的問題。如果以「_」為開始字元,則第二個字必須是大小寫字母或數字。
  • 有時候明明符合以上條件,卻還是編譯錯誤,那可能是你設的變數剛好跟VB內的保留字相同。此時可以換個變數名稱,或是在原有的變數名稱後加上數字試試。
  • 在VB中,變數的大小寫是不分的,也就是Computer及computer兩個變數名稱視為相同。常常有人忽略這點,而發生重複宣告變數的問題。

資料型別

為了能增進程式的效率,我們必須用正確型態的變數來儲存資料,所以有必要將資料加以分類,存到適合的變數中。不同的資料型態給予不同的記憶體配置,如此才能使變數達到最佳的工作效率。舉例來說,你想要存一個個位整數,你可以用整數型態,或是短整數型態去存,所佔用的記憶體空間只不過4Bytes或是2Bytes,可是你偏偏要用長整數去存,記憶體就吃了8Bytes,運算起來也會稍微有延遲的現象。

程式的型別很多,大致上可分為以下幾種:

  • 數值型別:一般數字、數值的型別。
  • 字串型別:一般文字(數字、英文、中文、符號)的型別。
  • 日期型別:用來表示日期、時間的型別。
  • 布林型別:真(True)、假(False)型別。
  • 物件型別:可存放任何型別的資料。

數值型別

數值型別是用來儲存數字型態的變數,又細分為下列的型別:

型別名稱

資料種類

記憶體大小

範圍

Sbyte具符號位元組1 Byte-128 到 127
Byte無符號位元組1 Byte0 到 255
Short具符號短整數2 Bytes-32768 到 32767
UShort無符號短整數2 Bytes0 到65536
Integer具符號整數4 Bytes-2147483648 到 2147483647
UInteger無符號整數4 Bytes0 到 4294967295
Long具符號長整數8 Bytes-9.22338e+18 到 9.22338e+18
Ulong無符號長整數8 Bytes0 到 1.84467e+19
Single單精度符點數4 Bytes負數:-3.4e+38 到 –1.4e-45

正數:1.4e-45 到 3.4e+38
Double雙精度符點數8 Bytes負數:-1.8e+308 到 –4.9e-324

正數:4.9e-324 到 1.8e+308
Decimal貨幣12 Bytes整數:-7.923e+28 到 7.923e+28

符點數:正負7.02281…(28位)之間

範圍這麼長,要怎麼記啊?別擔心,不用記冗長的範圍,記記憶體大小即可。

1 Byte=8 Bits,可表示的數字為2^8=256。若無符號則為0~255(共256個),有符號則-128~127(共256個)。為什麼有符號的時候負數的最大絕對值會大於正數的最大值?這要牽扯到電腦的2’s(2補數)運算了,有興趣的人可以去查查。

單精度符點數(Single)的有效位數為7位數,如果數值大於7位數,將以科學記號來表示。而雙精度符點數(Double)的有效位數為15位數,如果數值大於15位數,將以科學記號來表示。貨幣型別的有效位數則可達28位數。

科學記號

在VB中科學記號的表示法為:

nEc

「n」為1到10之間的數字。nEc即為:n*10^c。E就是底數10,c就是E的指數。

其它進制

在VB中,除了常用的十進制外,亦可以使用八進制或十六進制來表示數值。使用八進制時,要在數值上加上「&O」給VB識別那是一個八進制的數值,因此VB能直接將十進制前加上「&O」直接轉為八進制。若要使用十六進制,則要加上「&H」。

字串型別

字串型別又分為字元型別(Char)和字串型別(String)。字元型別(Char)代表一個Unicode字元,佔用兩個位元組(Byte);字串型別(String)則是由字元組成,類似一個字元陣列,每個英文字母或符號(半形文字)佔一個位元組,每個中文字(全行文字)佔兩個位元組,整個字串變數所佔的記憶體則視字串的長度而定。

字元 Char

字元型態變數(Char)只能儲存一個字元,如果給它設定超過一個字元(一個字串),編譯不會錯誤,但變數值為第一個字元(字串的第一個字)。字元變數宣告範例:

Dim chr1 As Char = “P”

字串 String

字串型態變數(String)可包含多個字元,字串值的設定要置於雙引號「"」之間,例如:

Dim string1 As String = “pcnoproblem”

如果要顯示雙引號「"」,則必須用兩個雙引號「""」,例如:

Dim string1 As String = “好網站""pcnoproblem""”

日期型別

日期型別(Date)用來表示程式中的時間或是日期,程式會自動幫使用者以常用的時間日期的格式顯示出來。日期型別可儲存時間、日期或是日期和時間。日期變數宣告範例:

Dim D As Date

設定日期的格式為:

#mm/dd/yyyy# ‘月/日/西元年

設定時間的格式為:

#hh:mm:ss [AM|PM]# ‘時:分:秒 [上午|下午]

AM、PM可不設,則程式會自動表示成24小時制。若未設定「分」及「秒」,則視為「0」。

同時設定日期及時間,須將日期格式置於時間格式之前:

#mm/dd/yyyy hh:mm:ss [AM|PM]#

若只設定日期,則預設的時間為「12:00:00 AM」;只設定時間,則預設的日期為「1/1/001」。

布林型別

布林型別(Boolean)只有兩個值:真(True)、假(False)。通常用於條件運算,或是做為其他變數的特徵變數。布林變數宣告範例:

Dim YesNo As Boolean

在程式中,布林變數常會與數值變數互相轉換,甚至會做運算。當數值變數轉換為布林變數時,只有「0」會被轉換為False,其餘的都轉換為True。如果是布林變數轉換為數值變數時,True被轉換為「-1」,False被轉換為「0」。

物件型別

物件型別(Object)佔用4個位元組,可以存放任何型別的資料,例如:

Dim o As Object

o = 104.78

o = “電腦不難"

以上程式碼,o物件變數從數值轉換到字串,仍正常執行,不會產生錯誤。

物件型別的宣告式可以省略成:

Dim o

物件型別在使用上看起來很方便,變數要放什麼就放什麼,不必顧慮資料型別的轉換而產生錯誤,看起來可以取代上面介紹的所有型別。不!錯了!使用物件型別變數雖然方便,但也要付出相當大的代價:首先須多耗費4個位元組的記憶體來記錄物件變數的位址,其次物件變數的運算速度較慢,會降低程式的效能。設計者如果能確定資料型別的話,應該使用適當的變數型別來進行宣告,才能得到最高效率。另外,物件型別(Object),在VB6為Variant,效率似乎比在VB2008還差。

變數初始值

當一個變數被宣告卻未設定內容,此時的變數值稱為變數的初始值。變數的初始值依不同型別而有不同的初始值:

型別名稱

初始值

數值型別0
字串型別Nothing
日期型別1/1/0001 00:00:00
布林型別False
物件型別Nothing

字串型別和物件型別的「Nothing」,其意思為「未設定」,Nothing與空字串並不相同:空字串是該變數有值,只是沒有東西顯示而看不到而已;Nothing表示該變數沒有設定值。若要將其它資料型別也存入Nothing,則要在宣告式中加上「?」,例如:

Dim A As Boolean? ‘A的初始值為Nothing

強制型別檢查

VB程式執行時,常會因為資料型別不明確,或者在資料型別自動轉換而產生邏輯上的錯誤,有時造成Debug上非常大的困擾。VB預設的資料型別檢查參數比較寬,會允許某部分的型別轉換。如果要程式在編譯階段就嚴格檢查型別不明確的程式碼,可使用「Option Strict」編譯器選項來強制檢查,以減少型別的邏輯錯誤。

「Option Strict」編譯器選項設定語法為:

Option Strict on|off ‘此行程式碼使用時須置於程式碼的最前方

「on」表示嚴格檢查型別,「off」表示關閉嚴格檢查型別功能,預設值為「off」。

如果專案中有許多程式檔,每個程式檔案都要加入嚴格檢查型別的程式碼很麻煩,這時可以到專案設定中設定一下。設定方法為:

步驟一 在VB2008中開啟專案,按下上方功能表的「專案→……(專案名稱) 屬性」。

 

步驟二 點選左邊「編譯」標籤,在Option Strict下拉式選單欄位選取「on」。

文章分類:VB.net|標籤:, , ,

迴響已關閉