Transcript 下載/瀏覽
第5章 變數、常數與資料型態 [我的主控台程式] 5-1 Visual Basic語言的寫作風格 5-2 變數與資料型態的基礎 5-3 變數的命名與宣告 5-4 符號常數的使用 5-5 資料型態 5-1 Visual Basic語言的寫作風格程式敘述(Statements) Visual Basic程式碼是由程式敘述組成,一 列程式敘述如同英文的一個句子,內含多 個運算式、運算子或關鍵字,如下所示: 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語言的寫作風格太長的程式碼 Visual Basic程式碼如果太長,基於程式編 排的需要,我們可以將程式碼分為兩列, 即在第1列程式碼最後加上「_」符號,如 下所示: 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列舉常數,如下表所示: 符號常數 vbBack vbTab vbCr vbLf vbCrLf vbNewLine vbNullChar 列舉常數 ControlChars.Back ControlChars.Tab ControlChars.Cr ControlChars.Lf ControlChars.CrLf ControlChars.NewLine ControlChars.NullChar 說明 退格鍵(Backspace) 定位字元(Tab) 換行字元(Carriage Return) 復行字元(Line Feed) 即 vbCr+vbLf 和 vbCrLf 擁有相同功能 0 值的字元 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的命名規則-命名 範例 一些Visual Basic元素名稱的範例,如下所 示: def, no_123, size1, _123, _abc ' 合法名稱 Car, count, height, s1, s2 ‘ 合法名稱 _ , 123abc ' 不合法名稱,以底線或數字開頭 5-3-1 Visual Basic的命名規則Visual Basic關鍵字 AddHandler Alias Ansi As Assembly Binary ByRef ByVal Case Catch Custom Default DirectCast Each Else End Error False Finally For Global Handles Implements In Into Key Lib Loop Me Module MustOverride MyBase MyClass Narrowing New Nothing NotInheritable NotOverridable Of Off Option Optional Overloads Overridable Overrides Partial Preserve Private Protected Public ReadOnly RemoveHandler Resume Shadows Shared Step Structure Text Then To TryCast Unicode Until When While WithEvents WriteOnly Auto Class ElseIf Friend Is MustInherit Next On ParamArray RaiseEvent Static True Widening 5-3-1 Visual Basic的命名規則-慣用 的命名法(1) 如果想維持程式碼的可讀和一致性,Visual Basic變數的命名可以使用一些慣用命名原 則。例如:匈牙利命名法是將變數的前3個 字元視為資料型態,依不同資料型態加上 字首字串,如下表所示: 資料類型 Boolean Char Integer Object String 字首 bln chr int obj str 範例 blnDoit chrA intCounter objCar strName 5-3-1 Visual Basic的命名規則-慣用 的命名法(2) CamelCasing命名法是第1個英文字小寫之 後為大寫,變數、程序/函數的命名可以使 用不同英文字母大小寫的組合,如下表所 示: 識別字種類 習慣的命名原則 範例 常數 使用英文大寫字母和底線"_"符號 MAX_SIZE、PI 變數 使用英文小寫字母開頭,如果是 2 個英 size、userName 文字組成,第 2 個之後的英文字以大寫 開頭 程序/函數 使用英文小寫字母開頭,如果是 2 個英 pressButton、scrollScreen 文字組成,其他英文字使用大寫開頭 5-3-2 變數的宣告-說明 程式語言的變數是儲存程式執行中的一些 暫存資料,程式設計者只需使用變數名稱 就可以存取記憶體位址的資料。簡單的說, 它就是使用有意義的名稱來代表數字的位 址。 5-3-2 變數的宣告-變數的屬性 程式的變數擁有一些屬性,可以用來描述 變數的組成元素,如下表所示: 屬性名稱 說明 名稱(Name) 變數名稱是一個標籤,可以在程式中識別出它是一個變數 位址(Address) 在記憶體中儲存此變數的記憶體位址 尺寸(Size) 變數所佔用的記憶體尺寸,以位元組為單位 型態(Type) 變數儲存資料的資料型態 值(Value) 變數值,也就是在記憶體位址中儲存的資料 壽命(Lifetime) 在執行程式時,變數存在期間,有些變數是在整個執行過 程中都存在;有些變數是在執行期間自動或由程式碼建立 範圍(Scope) 在程式碼的哪些程式敘述可以存取此變數 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 Explict On Option Strict:指定程式是否使用嚴格的型態檢 查,例如:當執行型態轉換時進行嚴格檢查, 預設值Off表示不嚴格檢查。如果需要嚴格檢查, 請設為On,如下所示: Option Strict Off 5-3-4 Option指令敘述-2 Option Compare:指定字串比較方式是使用二 進位或文字比較,可以是Binary(預設值)或 Text,如下所示: Option Compare Binary Option Infer:如果指定Option Explict Off設定 程式變數不需事先宣告時,我們可以再指定 Option Infer為On(預設值),讓Visual Basic 編譯器依變數第1次指定的值來自動決定最佳 的資料型態;值如果為Off,此時的資料型態為 Object,如下所示: Option Explict 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)是指變數儲 存的資料是整數沒有小數點,如下表所示: 資料型態 Byte SByte Short UShort Integer UInteger Long 說明 正整數 整數 短整數 正短整數 整數 正整數 長整數 位元組 1 1 2 2 4 4 8 ULong 正長整數 8 範圍 0~255 -128~127 -32,768~32,767 0~65,535 -2,147,483,648~2,147,483,647 0~4,294,967,295 9,223,372,036,854,775,808~9,223,372,036,8 54,775,807 0~18,446,744,073,709,551,615 5-5-1 整數資料型態-整數字面值 在程式碼如果直接使用「整數字面值」(Integral Literals),包含0、正整數和負整數都可以使用 十進位、八進位和十六進位來表示,其預設型態 是Integer,如果太長是Long型態。 整數字面值以"&O"開頭且每個位數的值為0~7整 數時,表示是八進位;"&H"開頭的數值,位數值 為0~9或A~F是十六進位。一些整數字面值的範例, 如下表所示: 整數字面值 19 &O377 &Hff &H3E7 十進位值 19 255 255 999 說明 十進位整數 八進位整數 十六進位整數 十六進位整數 5-5-1 整數資料型態-型態字元 如果想指定整數字面值的資料型態,可以 在整數字面值後加上型態字元(Type Characters),如下表所示: 資料型態 Short UShort Integer UInteger Long ULong 型態字元 S US I 或% UI L 或& UL 範例 19S 19US 19I、19% 19UI 19L、19& 19UL 5-5-2 浮點數資料型態-浮點數資料 型態 「浮點數資料型態」(Floating Point Types)是 指數值是整數再加上小數,例如:3.1415、 102.567等,如下表所示: 資料型 說明 位元組 範圍 態 Single 單精度的浮點 4 負值範圍為-3.4028235E+38~-1.401298E-45, 數 正值的範圍為 1.401298E-45~3.4028235E+38 Double 雙精度的浮點 8 負值範圍為-1.79769313486231570E+308~數 4.94065645841246544E-324,正值範圍為 4.94065645841246544E324~1.79769313486231570E+308 Decimal 16 數值 0~+/-79,228,162,514,264,337,593,543,950,335 沒有小數,0~+/7.9228162514264337593543950335 帶 28 位小 數,最小的非零值為+/0.0000000000000000000000000001(+/-1E-28) 5-5-2 浮點數資料型態-浮點數字面 值 「浮點數字面值」(Floating Point Literals) 預設是Double型態,可以使用"E"符號代表 10為底的指數。一些浮點數字面值的範例, 如下表所示: 浮點數字面值 0.0005 .0005 5E-4 十進位值 0.0005 0.0005 0.0005 說明 浮點數 浮點數 使用 e 指數的浮點數 5-5-2 浮點數資料型態-字尾型態字 元 浮點數字面值如果需要指定使用的資料型 態,同樣是使用字尾型態字元,如下表所 示: 資料型態 Single Double Decimal 型態字元 F 或! R 或# D 或@ 範例 45.67F、45.67! 45.67R、45.67# 45.67D、45.67@ 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種資料型態,如下表所示: 資料型態 Char String 說明 字元 字串 位元組 2 依平台 範圍 0~65535 0~2 百萬 Unicode 字元 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資料型態,如下表 所示: 資料型態 Date 說明 位元組 8 日期/時間 範圍 0001 年 1 月 1 日~9999 年 12 月 31 日 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資料型態。