第5章 變數、常數與資料型態 [我的主控台程式]
Contents 5-1 Visual Basic語言的寫作風格 5-2 變數與資料型態的基礎 5-3 變數的命名與宣告 5-4 符號常數的使用 5-5 資料型態
5-1 Visual Basic語言的寫作風格- 程式敘述(Statements) Dim balance As Integer = 5000 interest = balance * rate lblOutput.Text = "第一個Visual Basic應用程式" 每一列程式碼可以使用半形冒號「:」來分隔多列程式敘述,如下所示: balance = 10000: rate = 0.04: interest = balance * rate
5-1 Visual Basic語言的寫作風格- 程式區塊(Blocks) 程式區塊是由多個程式敘述組成,它是位在Sub/End Sub、Function/End Function和If/End If等擁有End關鍵字間的程式碼,如下所示: Private Sub Button1_Click(…) _ Handles Button1.Click … End Sub
5-1 Visual Basic語言的寫作風格- End程式敘述結束程式 Visual Basic應用程式的進入點是主程式Main()或啟動的表單物件,如果使用程式碼結束Visual Basic程式,可以使用End程式敘述,當程式執行到此程式敘述,就馬上結束應用程式執行,如下所示: Private Sub Button2_Click(ByVal sender _ As System.Object, _ ByVal e As System.EventArgs) _ Handles Button2.Click End End Sub
5-1 Visual Basic語言的寫作風格- 程式註解(Comments) 程式註解是程式設計上很重要的部分,良好註解不但能夠容易了解程式目的,在維護上也可以提供更多資訊。 Visual Basic程式註解是以REM指令或「‘」符號開始的列,或程式列此符號後內容,如下所示: REM 變數的宣告 ' 第一個Visual Basic程式 Dim size1,size2 As Integer ' 變數的宣告
5-1 Visual Basic語言的寫作風格- 太長的程式碼 Dim size1,size2,size3,size4,size5 _ ,size6,size7,size8,size9 As Integer
5-1 Visual Basic語言的寫作風格- 列印和顯示的符號常數(說明) Visual Basic仍然支援舊版VB6列印和顯示的符號常數,這些符號常數屬於輸出時的一些控制字元,程式碼如果在輸出字串時需要換行,在字串最後可以加上vbNewLine或vbCrLf符號常數,如下所示: lblOutput.Text = "輸入的字串: " & str & _ vbNewLine 上述程式碼會換行是因為在最後使用「&」字串連接運算子加上vbNewLine符號常數,所以輸出內容就會換行。
5-1 Visual Basic語言的寫作風格- 列印和顯示的符號常數(常用常數) 在Visual Basic提供對應功能的ControlChars列舉常數,如下表所示:
5-2 變數與資料型態的基礎-圖例 在程式語言的「變數」(Variables)可以視為是一個擁有名稱的盒子,能夠暫時儲存程式執行時所需的資料,如下圖所示:
5-2 變數與資料型態的基礎-說明1 方形和圓柱形的兩個盒子名稱分別是變數名稱name和height,在盒子中儲存的資料"VB程式"和100稱為「字面值」(Literals)或稱為「常數值」(Constants),也就是數值、字元或字串等值,如下所示: 100 15.3 "Visual Basic程式"
5-2 變數與資料型態的基礎-說明2 現在回到盒子本身,盒子形狀和尺寸決定儲存資料,對比程式語言來說,形狀和尺寸就是變數的資料型態(Data Types)。 資料型態可以決定變數能夠儲存什麼值?它可以是數值、字元或字串等資料,當變數指定資料型態後,就表示只能儲存這種型態資料,如同圓形盒子放不進相同直徑的方形物品,只能放進方形盒子中。
5-3 變數的命名與宣告 5-3-1 Visual Basic的命名規則 5-3-2 變數的宣告 5-3-3 指定敘述 5-3-4 Option指令敘述
5-3 變數的命名與宣告 對於高階程式語言來說,程式是由「資料」(Data)和「指令」(Instructions)組成,如下所示: 資料部分:本章「變數」(Variables)和「資料型態」(Data Types)。 指令部分:第6章的運算子、第7和8章的「流程控制」(Control Structures)和第9章的「副程序」(Subroutines)。
5-3-1 Visual Basic的命名規則-說明 在程式碼除了程式語言的「關鍵字」(Keywords,或稱保留字)外,大部分都屬於程式設計者自訂的元素名稱,稱為「識別字」(Identifier),例如:變數、程序、函數和物件名稱等。
5-3-1 Visual Basic的命名規則-命名規則 程式設計者替元素命名時,需遵循程式語言的語法。元素命名十分重要,因為一個好名稱如同程式註解,可讓程式更容易了解。 Visual Basic語言命名原則,如下所示: 識別字不可使用Visual Basic關鍵字或系統物件名稱。 名稱必須是英文字母或底線「_」開頭,如果以底線開頭,至少需要再加上一個其他英文字母或數字。 名稱長度不可超過16383個字元,不區分英文字母大小寫,abc和ABC代表同一個名稱。 名稱中間不能有句點"."、運算子(例如:+-*/^等)或空白,只能是英文字母、數字和底線。 在宣告的有效範圍內必須唯一,有效範圍的說明請參閱第9章的程序和函數。
5-3-1 Visual Basic的命名規則-命名範例 def, no_123, size1, _123, _abc ' 合法名稱 Car, count, height, s1, s2 ‘ 合法名稱 _ , 123abc ' 不合法名稱,以底線或數字開頭
5-3-1 Visual Basic的命名規則-Visual Basic關鍵字
5-3-1 Visual Basic的命名規則-慣用的命名法(1)
5-3-1 Visual Basic的命名規則-慣用的命名法(2) CamelCasing命名法是第1個英文字小寫之後為大寫,變數、程序/函數命名可使用不同英文字母大小寫組合,如下表所示:
5-3-2 變數的宣告-說明 程式語言的變數是儲存程式執行中的一些暫存資料,程式設計者只需使用變數名稱就可以存取記憶體位址的資料。簡單的說,它就是使用有意義名稱來代表數字的位址。
5-3-2 變數的宣告-變數的屬性 程式的變數擁有一些屬性,可用來描述變數的組成元素,如下表所示:
5-3-2 變數的宣告-變數的宣告 Visual Basic變數是使用Dim關鍵字進行宣告,如下所示: Dim size 上述程式碼宣告變數size,因為沒有指定資料型態,預設的資料型態是Object,可儲存各種資料型態的值。如果宣告變數有指定資料型態,需要使用As關鍵字來宣告變數資料型態,如下所示: Dim height, width As Integer 如果同一列的2個變數屬於不同資料型態,也可以分別宣告其資料型態,如下所示: Dim name As String, depth As Integer
5-3-2 變數的宣告-變數的初值 如果需要,在宣告變數時可以同時指定初值,如下所示: Dim name As String, depth = 100 Dim title As String = "Visual Basic程式" 上述程式碼宣告字串變數name和title,並且指定字串變數title初值。 變數depth沒有指定型態;但指定初值100,在Visual Basic 2005的預設型態是Object;2008則會自動以初值來指定資料型態為整數。
5-3-2 變數的宣告-Visual Basic專案 Visual Basic專案:Ch5-3-2\我的主控台程式 在Windows應用程式宣告變數和指定變數初值,最後在Label標籤控制項顯示變數值。其執行結果如下圖所示:
5-3-3 指定敘述-範例 在Visual Basic程式宣告變數後,就可以使用指定敘述來指定變數值,也就是「=」等號運算子,如下所示: Dim depth, height, width As Integer Dim name As String height = 35 width = 57 name = "陳會安" 上述程式碼在宣告整數和字串型態的變數後,使用指定敘述來指定變數值。
5-3-3 指定敘述-圖例 在指定敘述「=」等號左邊的變數稱為「左值」(Lvalue),指的是變數位址(Address)屬性,如果變數在等號右邊稱為「右值」(Rvalue),即變數的值(Value)屬性。目前變數的記憶體圖例,如下圖所示:
5-3-3 指定敘述-圖例說明 變數depth只有宣告沒有指定初值,其初值是0。變數height和width分別使用指定敘述指定為35和57,在指定敘述等號右邊的35和57稱為字面值(Literals)。如果指定敘述的右邊是變數,如下所示: depth = height 上述程式碼在等號左邊的變數depth是左值,取得的是位址,右邊變數height是右值,即取出變數值,所以指定敘述是將變數height的「值」存入變數depth的記憶體「位址」,即1008。換句話說,就是更改變數depth的值成為變數height的值,即35。
5-3-3 指定敘述-Visual Basic專案 Visual Basic專案:Ch5-3-3\我的主控台程式 在Windows應用程式宣告變數,和使用指定敘述來指定變數值,最後在TextBox唯讀多行文字方塊控制項顯示變數值。其執行結果如下圖所示:
5-3-4 Option指令敘述-1 Option關鍵字可設定編譯器參數,決定編譯時是否檢查變數的資料型態,如下所示: Option Explicit:設定程式變數是否一定需要事先宣告,Off表示不用宣告;強迫宣告需設為On,此為VBE的預設值,如下所示: Option Explicit On Option Strict:指定程式是否使用嚴格的型態檢查,例如:當執行型態轉換時進行嚴格檢查,預設值Off表示不嚴格檢查。如果需要嚴格檢查,請設為On,如下所示: Option Strict Off
5-3-4 Option指令敘述-2 Option Compare Binary Option Explicit Off Option Compare:指定字串比較方式是使用二進位或文字比較,可以是Binary(預設值)或Text,如下所示: Option Compare Binary Option Infer:如果指定Option Explicit Off設定程式變數不需事先宣告時,我們可以再指定Option Infer為On(預設值),讓Visual Basic編譯器依變數第1次指定的值來自動決定最佳的資料型態;值如果為Off,此時的資料型態為Object,如下所示: Option Explicit Off Option Infer On
5-3-4 Option指令敘述-Visual Basic專案 Visual Basic專案:Ch5-3-4\我的主控台程式 在VBE專案的Windows應用程式指定Option Explicit設為Off,和Option Infer為On後,就不用先宣告變數,即可隨時在程式碼中使用變數,這是讓Visual Basic編譯器自動決定最佳的資料型態。其執行結果如下圖所示:
5-3-4 Option指令敘述-Visual Basic專案屬性
5-4 符號常數的使用 5-4-1 符號常數的使用 5-4-2 列舉資料型態
5-4 符號常數的使用 「符號常數」(Symbolic Constants或Named Constants)是在程式碼使用名稱來取代數字或字串字面值,與其將符號常數視為變數,不如說它是名稱轉換,將一些字面值使用有意義的名稱來取代。 在Visual Basic語言可以使用內建符號常數、自訂符號常數和使用列舉資料型態來建立常數。
5-4-1 符號常數的使用-說明 Visual Basic語言本身就擁有一些內建符號常數,例如:vbTab、vbNewLine等,不過使用者可以自行使用Const關鍵字建立符號常數,請注意!符號常數在宣告時一定需要指定其字面值,如下所示: Const MAX_WIDTH = 150 Const PI = 3.1415926 上述程式碼建立符號常數,MAX_WIDTH常數值為150;圓周率常數PI的值為3.1415926。
5-4-1 符號常數的使用-Visual Basic專案 Visual Basic專案:Ch5-4-1\我的主控台程式 在Windows應用程式宣告符號常數,並且在運算式使用符號常數來計算圓面積。其執行結果如下圖所示:
5-4-2 列舉資料型態-範例 如同符號常數是使用名稱來取代固定數值,「列舉常數」(Enumerations)是使用一組名稱取代一組整數資料型態的數值。它是使用Enum/End Enum程式敘述進行宣告,如下所示: Enum Color As Integer White = 1 Red Blue = 5 Green Black = Green End Enum
5-4-2 列舉資料型態-範例說明 White、Red、Blue、Green和Black是列舉常數的「成員」(Members),可以使用指定敘述來指定其值。以此例White為1,Red沒有指定,預設是前一個值加1,即2,Blue指定成5,Green為5+1,即6,Black指定成Green,表示和Green擁有相同值6。 如果Color列舉常數沒有指定初值,第1個常數的值預設從0開始,依序為0、1、2.3….。在Visual Basic程式取得列舉常數是使用「.」運算子,如下所示: txtOutput.Text = "色彩值:" & Color.White & _ vbNewLine
5-4-2 列舉資料型態-Visual Basic專案 Visual Basic專案:Ch5-4-2\我的主控台程式 在Windows應用程式宣告列舉常數Color,然後顯示各列舉常數成員的對應值。其執行結果如下圖所示:
5-5 資料型態 5-5-1 整數資料型態 5-5-2 浮點數資料型態 5-5-3 布林資料型態 5-5-4 字元與字串資料型態 5-5-5 日期/時間資料型態 5-5-6 Object資料型態
5-5 資料型態 Visual Basic 2008語言的資料型態是指變數的記憶體位址儲存的資料種類,Visual Basic資料型態可以分為「數值型態」(Value Types)和「參考型態」(Reference Types)兩種資料型態,如下所示: 數值型態:變數值儲存的是字面值,它是記憶體儲存的內容。Visual Basic語言提供Byte、Short、Integer、Long、Single、Double、Char和Boolean等「基本資料型態」(Primitive Types)。 參考型態:變數值並不是記憶體內容,而是記憶體位址。例如:Module、Class、String和Array陣列等,在第10章說明陣列Array;附錄A說明Class。
5-5-1 整數資料型態-整數資料型態 「整數資料型態」(Integral Types)是指變數儲存的資料是整數沒有小數點,如下表所示:
5-5-1 整數資料型態-整數字面值 在程式碼如果直接使用「整數字面值」(Integral Literals),包含0、正整數和負整數都可以使用十進位、八進位和十六進位來表示,其預設型態是Integer,如果太長是Long型態。 整數字面值以"&O"開頭且每個位數的值為0~7整數時,表示是八進位;"&H"開頭的數值,位數值為0~9或A~F是十六進位。一些整數字面值的範例,如下表所示:
5-5-1 整數資料型態-型態字元 如果想指定整數字面值的資料型態,可以在整數字面值後加上型態字元(Type Characters),如下表所示:
5-5-2 浮點數資料型態-浮點數資料型態 「浮點數資料型態」(Floating Point Types)是指數值是整數再加上小數,例如:3.1415、102.567等,如下表所示:
5-5-2 浮點數資料型態-浮點數字面值 「浮點數字面值」(Floating Point Literals)預設是Double型態,可以使用"E"符號代表10為底的指數。一些浮點數字面值的範例,如下表所示:
5-5-2 浮點數資料型態-字尾型態字元 浮點數字面值如果需要指定使用的資料型態,同樣是使用字尾型態字元,如下表所示:
5-5-3 布林資料型態 「布林資料型態」(Boolean Type)佔用2個位元組,其值只有兩個:True和False,對應「真」或「偽」狀態。
5-5-4 字元與字串資料型態-說明 字元和字串資料型態變數儲存的值都是Unicode字元資料,「字元資料型態」(Char Type)是單一Unicode字元,如果是數值,可以儲存無符號(Unsigned)16位元整數;「字串資料型態」(String Type)是0或多個循序的Char資料型態的字元。
5-5-4 字元與字串資料型態-字元與字串資料型態 在Visual Basic語言分為儲存單一字元和多字元的2種資料型態,如下表所示:
5-5-4 字元與字串資料型態-字串字面值 「字串字面值」(String Literals)是0或多個循序的Char資料型態的字元,以雙引號括起的文字內容,如下所示: Dim str1 As String = “Visual Basic程式設計” Dim str2 As String = “Hello World!” Dim str3 As String = ”\\localhost\download\joe”
5-5-4 字元與字串資料型態-字元字面值 「字元字面值」(Character Literals)是以雙引號括起的單一字元,如下所示: Dim a As Char = "A"C 上述變數宣告時指定初值為字元A,最後的字尾型態字元"C"表示它是字元,而不是字串。
5-5-5 日期/時間資料型態-日期/時間資料型態 「日期/時間資料型態」(Date Type)宣告的變數可以用來儲存日期/時間資料。日期/時間資料型態就是Date資料型態,如下表所示:
5-5-5 日期/時間資料型態-日期/時間字面值 「日期/時間字面值」(Date Literals)的日期時間資料需要使用「#」括起,如下所示: Dim tday As Date = #4/30/2010 12:00:00 AM# 上述日期/時間值的年份有4位數,時間部分可以是12或24小時制,如果沒有AM或PM是24小時制,可以忽略分或秒,其預設值為0。
5-5-6 Object資料型態 Object是所有Visual Basic資料型態的基礎資料型態,換句話說,宣告成此資料型態的變數可以儲存各種不同資料型態的資料。 Visual Basic語言預設在宣告變數時,並不需要宣告資料型態,如果沒有宣告資料型態,預設資料型態就是Object資料型態。