第 2 章 Visual Basic 初步
本章重點提要 2-1 Visual Basic 的程式組成 2-2 敘述的構成要素:關鍵字、識別字、文數字與特殊符號 2-3 算術運算 2-4 語法錯誤 2-5 程式註解 2-6 使用變數 2-7 接續符號『_』與存取成員符號『.』
本章閱讀建議 2-1 Visual Basic 的程式組成:本章開始正式進入 Visual Basic 的語法說明, 首先來認識 Visual Basic 程式的組成方式。 2-2 敘述的構成要素:關鍵字、識別字、文數字與特殊符號:Visual Basic 敘述是由『關鍵字、識別字、文數字、特殊符號』四種不同要素構成, 本節將分別說明之。
本章閱讀建議 2-3 算術運算:程式最主要的用途是運算, 因此本節先來認識Visual Basic 的算術運算, 雖然其符號用法和我們平常用的數學符號差不多, 但有些差異是要特別注意的。 2-4 語法錯誤與警告:雖然 VB 提供 Intellisense 功能幫我們自動完成一部份的程式敘述, 但寫程式時難免會發生錯誤,因此初學者務必要瞭解寫錯程式時應如何解決及修正。
本章閱讀建議 2-5 程式註解:程式中的敘述主要是給電腦看的, 但很多時候我們也需在程式中加一些給『人』看的資訊, 所以接著來學習如何在Visual Basic 程式中加入註解文字。 2-6 使用變數:本節是學習撰寫程式的重點, 我們所撰寫的各種程式, 基本上就是在處理變數, 在本節要學到使用變數的基本語法。 2-7 接續符號『_』與存取成員符號『.』:不同的符號在 Visual Basic 代表不同的意義, 本節將介紹『_』和『.』這兩個常用符號的用法。
2-1 Visual Basic 的程式組成 Visual Basic 程式是由一行一行的敘述 (Statement) 所組成的,例如前一章的範例 Ch01-02 就是由 5 行敘述和 2 行空白所組成的:
Visual Basic 的程式組成 敘述間的空白行通常是為了方便閱讀而加上的, 如果刪除上列程式第 2、6 行的空行, 並不會影響程式的執行結果, 但程式看起來就會擠在一起, 不易閱讀;同理, 多加兩行空白也不會影響程式的執行結果。
敘述是以行為單位 空白行可以自由刪除和增加, 但敘述則不能任意擠在同一行或分成好幾行, 因為 Visual Basic 的敘述是以行為單位。將兩個敘述放在同一行, Visual Basic 編譯器就會將之視為錯誤, 例如:
2-2 敘述的構成要素:關鍵字、 識別字、文數字與特殊符號 表面上看, 敘述是由一些英文字母組成的, 其實這些英文字具有個別不同的意義, 共有以下四類: 關鍵字 (Keyword):或稱保留字 (Reserved Word), 由 VisualBasic 所內建, 代表特定意義的單字。 識別字 (Identifier):非 Visual Basic 內建, 而是後來由程式設計者自己所定義, 代表某項事物的單字。
敘述的構成要素:關鍵字、 識別字、文數字與特殊符號 文數字 (Literal):用人們可識別的方式, 來表示文字、數字、日期、時間等資料。 特殊符號:具特殊意義的符號。
敘述的構成要素:關鍵字、 識別字、文數字與特殊符號 以前面範例程式第 1 行的『Module Module1』為例, 即是由關鍵字 Module 和識別字 Module1 所組成的一行敘述。請特別注意,『Module』和『 Module1』雖然只有一個字元的差別, 但兩者的意義是完全不同的!
敘述的構成要素:關鍵字、 識別字、文數字與特殊符號 至於範例程式第 4 行『Console.WriteLine("Hello Visual Basic")』,這行敘述是由以下內容所組成: 兩個識別字:Console 和 WriteLine。 一個文數字:"Hello Visual Basic"。 三個特殊符號:小數點 "." 和左右括號 "("、")"。
關鍵字 關鍵字 (Keyword) 是 Visual Basic 中預先定義好的, 具有特殊意義的單字。我們可以想像 Visual Basic 自己有一本字典, 關鍵字就是字典中有記載的單字, 每個單字都具有特定的功能及語法, 我們要使用這些關鍵字時, 就要依其語法規範, 不可隨意亂用。
關鍵字 以下所列就是 3 個我們已看過的 Visual Basic 關鍵字:
識別字 識別字 (Identifier) 是由程式撰寫者自行定義, 以代表某項事物的單字。定義識別字時可使用任何中英文字元, 但習慣上一般較少使用中文字元, 因為輸入、編輯較不方便, 識別字的命名規則如下:
識別字 可使用中、英字元、底線字元 (_)、和數字。但數字不能放在字首。例如: 識別字中不可全部都是底線字元, 例如 __、_____ 都是不合法的識別字。 不能用 Visual Basic 關鍵字當識別字。
識別字 另外像 .NET Framework 類別庫中的類別 (Class)、方法 (Method)名稱, 也都是識別字, 而非關鍵字。 因為它們並不屬於 Visual Basic 語言本身, 而是由微軟的程式設計師們, 另外設計出來放在.NET Framework 類別庫中, 讓使用 Visual Basic、C#、C++ 語言的程式設計者使用。
識別字 例如在第 1 章練習程式中所用的 Console、WriteLine, 就是 .NET Framework 類別庫中的類別與方法, 這些現成的類別和方法我們都可直接使用。至於 .NET Framework 類別庫中到底提供了哪些類別及方法, 可由 VB 的線上說明中查詢。
什麼是『類別庫』? .NET Framework 除了提供 CLR 這個執行環境外, 還提供一個實用的類別庫(Class Library)。藉由這個類別庫, 讓我們可用最簡捷的方式寫出程式。 雖然每個人要寫的程式功能各有不同, 但每個程式難免會有一些相同的部份,舉例來說, Windows 應用程式都會有個視窗, 每個視窗的外觀、內容雖不盡相同, 但都具備基本的屬性與操作方法。
什麼是『類別庫』? 例如:視窗有外框和標題欄、有按鈕可以讓使用者放大或縮小視窗...等。如果程式開發者, 每次都要重複撰寫這些基本功能的程式, 那麼軟體工業的效率將大打折扣。因此如果有人能將這些基本的程式寫好, 並提供給大家使用, 如此一來, 寫起程式就輕鬆多了。
什麼是『類別庫』? 第 1 章提到過, 類別就是具備某項功能的一組程式與資料型態的集合, 而如果將常用的程式、資料分門別類寫好、放在一個個的類別中, 這群類別就是一個類別庫。 當我們寫程式時, 可使用類別庫所提供的類別來建立物件、有些類別還可直接呼叫其方法, 不需建立物件, 像我們用 Console.WriteLine() 在文字模式輸出文字時,即是直接呼叫『Console』類別的『WriteLine()』方法, 並不需建立任何物件。
什麼是『類別庫』? 一般而言, 類別庫的來源包括: 微軟 .NET Framework 中的類別庫 (Class Library):為了讓大家更能接受 .NETFramework 環境, 微軟也設計好大量的類別放在 .NET Framework 的基本類別庫 (Base Class Library) 中, 供程式設計者使用。往後各章, 我們就會陸續用到此類別庫中的各種類別來開發程式。
什麼是『類別庫』? 自行設計:經常撰寫程式的個人或開發團隊, 可將常用的功能設計成類別來使用, 以後寫起程式更能得心應手。 Freeware 或市售商品:有些人會將寫好的類別庫, 提供給大家免費使用;也有廠商會將特定用途的類別庫公開販售。
識別字 下列何者不是合法的識別字? (A) 鹿耳門 (B) Module (C) Not_Module (D) 3隻小豬(E) #1/1/2009# (F) True (G) 3.14159 (H) threeLittlePig (B)、(D)、(E)、(F)、(G)。其中 (B)、(F) 為關鍵字;(D) 首字使用數字; (E)、(G) 為文數字。
文數字 文數字 (Literal) 是在程式中表示資料的方法, 例如我們用過的"Hello Visual Basic" 就是一個文數字。在 Visual Basic 中用文數字可表示的資料有整數、浮點數 (Floating Point)、字串 (String)、字元、日期 (Date, 但也可表示時間)、真假資料 (稱為布林值 -Boolean) 等 6 種, 如下表所示:
文數字
文數字 上表所列的文數字 (資料) 種類, 都是在撰寫程式時經常會用到的,其中數值的表示方式還有更多的變化, 在第 5 章會進一步詳述文字數的用法。
特殊符號 許多符號在 Visual Basic 中也都代表特殊的意義, 例如我們前一章就用過的 『.』 和左右括弧, 另外像是接著要介紹的 +、-、*、/ 等代表加減乘除, 還有一些符號會在後面各章適時介紹。
特殊符號 請試著指出『Sub Main()』是由什麼關鍵字、識別字、特殊符號組成的。
2-3 算術運算 在 Visual Basic 中可以用下列的符號來進行算術運算:
算術運算 在程式語言中, 將這些符號稱為運算子 (operator), 例如 + 稱為加法運算子。
用 Visual Basic 做算術 練習各種算術運算子用法, 並用程式輸出運算結果。 請建立新的主控台應用程式專案 Ch02-01, 並將專案存至\VB2008\Ch02 子資料夾中:
用 Visual Basic 做算術 接著在 Main() 中輸入下列程式:
用 Visual Basic 做算術 按 [Ctrl]+[F5] 執行程式 ( 請一律用此方式執行本章的主控台應用程式專案, 否則會因執行過程一下就結束, 而無法看到執行結果), 就會看到如下的執行結果:
用 Visual Basic 做算術 按任意鍵結束程式。 我們利用 Console.WriteLine() 一行一行的輸出 (即 Write Line 的意思) 各運算式的計算結果至 Console (主控台的『輸出』裝置就是螢幕), 例如:
用 Visual Basic 做算術 在括號中的 3+5 是個算術運算式 (Expression), 而非字串, 此時Visual Basic 就會先算出運算式 3+5 的結果, 再將結果轉成字串輸出:
用 Visual Basic 做算術 在運算式中, 參與運算的資料稱為運算元 (Operand), 例如『3+5』中的 3、5 就是運算元;而代表運算方式的『+』則稱為運算子。 請試寫出下列運算式的計算結果, 寫完後再用 Visual Basic 程式驗證之。(A) 12.3 + 4.56 (B) 9-99 (C) 3^3 (D) 66\5 (E) 12.3 Mod 4 (A) 16.86 (B) -90 (C) 27 (D) 13 (E) 0.3
運算的優先順序 我們學的數學運算是先乘除、後加減, Visual Basic 也依循此規則,所以『3 + 4 * 5』的結果是 23 而非 35。不過 Visual Basic 還有\、Mod、^ 這幾個運算子, 當它們與加減乘除一同出現時, 其優先順序如下:
運算的優先順序
運算的優先順序 如果是優先順序相同, 則是依由左到右的順序計算, 例如:
用括弧改變優先順序 如果要改變運算的優先順序, 也可以和一般算術運算式一樣, 在要優先計算的式子前後加上括弧, 例如:
使用負號 大家都知道在數字前可用減號代表負數, 在 Visual Basic 中, 負號(-) 先優先順序僅次於 ^, 但優先於其它所有算術運算, 例如:
使用負號 所以如果將負號加入前面所列的優先順序表, 則結果如下:
使用負號 請試寫出下列運算式的計算結果, 寫完後再用 Visual Basic 程式驗證之。 (A) 100 Mod 30 \ 4 (A) 2 (B) -0.333333333 (C) -27 (D) 0.5
使用負號
2-4 語法錯誤 不管是初學程式語言還是程式高手, 在撰寫程式時難免會出錯, 例如打錯字或漏打符號等, 造成語法錯誤(Syntax Error)。 當我們在VB 編寫程式, VB 會即時檢查我們輸入的內容, 若發現我們輸入的敘述有問題, 就會在有問題的地方, 以波浪狀的底線標示出來:
語法錯誤
語法錯誤 除了以波浪狀底線表示語法問題, 對某些語法錯誤, VB 也會用如下的底線表示錯誤:
語法錯誤 練習使用 VB 的錯誤提示功能, 查詢錯誤資訊。 請建立一新專案 Ch02-02, 並輸入如下程式:
語法錯誤 VB 會在兩個 Console.WriteLine() 都標示代表錯誤的波浪狀底線, 只要將滑鼠移到線上面, VB 就會顯示相關資訊, 例如:
語法錯誤 上述適用於查看單一個錯誤。若想一次瀏覽程式中所有的錯誤資訊, 可執行『檢視/ 錯誤清單』命令, 在 VB 中就會出現如下的窗格:
語法錯誤 如果由 VB 提示的訊息, 無法解除疑惑、您仍不知應如何修改程式, 此時可求助於 VB 的線上說明:
語法錯誤 此時會開啟 VB 的線上說明文件 ( 稱為 MSDN Library), 其中會提示可能的修改方式。您可依敘述的內容, 選擇合適的方法,試著排除程式的錯誤。
語法錯誤
語法錯誤 對 Visual Basic 初學者而言, 可能無法完全瞭解文件中說明文字的意義, 這是正常現象。日後對 Visual Basic 的知識逐漸擴增, 自然就能明白文件要表達的內容。
語法錯誤 程式除了錯誤外, 也可會出現『警告』(Warning), 出現『警告』時, 表示 VB 雖然不認為語法有錯誤, 但覺得該敘述的用法不恰當, 可能會造成執行結果錯誤。如果確定程式內容沒有錯誤, 可不理會『警告』訊息。
程式有錯誤時亦無法執行程式 在程式已出現底線時, 若不理會而逕按[F5] 鍵或[Crtl] + [F5]鍵執行程式, 則會出現如下訊息:
語法錯誤 在此也要提醒讀者一點, VB 的語法分析程式, 雖能替我們找出語法錯誤, 但有時候它所提示的訊息, 並非對等於我們所犯的錯誤。
語法錯誤 例如剛才範例中的 Console.WriteLine(Visual Basic)敘述, 我們是想輸出 "Visual Basic" 字串, 但是忘了在字串前後加雙引號, 但 VB 提示的資訊是:
語法錯誤 由於沒有代表字串的雙引號, 所以 VB 把原本是字串的文字當成識別字了, 且因程式中未定義識別字 Visual, 所以 VB 顯示的訊息是『名稱 "Visual"未宣告』, 好像在程式中宣告這個名稱就可以解決(下一節會介紹如何宣告變數)。但依我們設計程式的原意, 正確的解決方式是加上雙引號, 而不是真的去宣告識別字。 不過, 儘管 VB 提示的訊息與實際的錯誤原因有時會有些出入, 但至少 VB 能告知我們的程式有問題, 在這種情況下就要自行判斷造成語法錯誤的真正原因, 並修正。
2-5 程式註解 雖然程式是給電腦看的, 但很多情況下『人』也要看程式 (例如系統的維護人員), 所以為了方便人們閱讀程式, Visual Basic也允許我們將『給人看』的文字加在程式之中, 也就是註解(Comment)。
程式註解 要在 Visual Basic 中加入註解, 需以單引號 (') 為開頭, 例如:
程式註解 在單引號之後的所有文字, 都會被 Visual Basic 視為註解, 而不會被當成程式內容。在編譯程式時, Visual Basic 編譯器會忽略註解文字, 不予編譯;而在 VB 中編寫註解時, VB 也會將以單引號開頭的註解文字, 自動以綠色顯示:
程式註解 由於註解是從單引號『開始』, 所以我們可將註解加在敘述後面: 但要注意不可加在敘述之前, 因為這樣會讓一整行都變成註解, 而非敘述:
程式註解 不過在測試程式的過程中, 我們也可利用標示註解的方式, 將我們暫時不想執行的程式標為註解, 例如: 在本書後續各章的程式範例, 都會利用註解的方式加上適當的程式說明, 讓讀者瞭解程式的運作。
2-6 使用變數 Visual Basic 程式中的資料可分為變數(Variable) 和常數(Constant)兩種, 變數的意思就是說, 在程式執行過程中可隨時變更其值。例如:
使用變數 而常數則是在程式執行過程中, 其值不會變動的資料。例如前面學過的文數字, 當我們在程式中寫下一個文數字, 其值即固定不會變化:
宣告變數 剛才的例子中, 有一個『宣告變數』的敘述 "Dim var1", 宣告變數的目的就相當於是定義一個識別字, 之後 Visual Basic 才會認得這個識別字, 知道它是我們定義的變數。如果少了這行敘述, 在 VB中就會看到上一節看過的波浪狀底線。
宣告變數 宣告變數的敘述很簡單, 首先是以關鍵字 Dim 為開頭, 後面接著就是我們自己命名的變數名稱。命名規則就是 2-1 節所提的識別字命名規則, 通常我們會用能代表變數意義的英文單字或縮寫, 來為變數取名字。以下都是合法的宣告變數敘述:
宣告變數 我們也可在同一行敘述中同時宣告多個變數, 此時只要用逗號將變數名稱隔開即可:
變數的應用 在數學上變數常用於公式中代表可任意替代的數, 例如矩形面積公式是『長 ×寬』, 如果用 x 代表長、y 代表寬, 就可寫成: 知道這樣的公式, 以後遇到任何長寬的矩形, 我們都可以算出其面積。在程式中也是如此, 我們可用變數儲存要計算的值, 再用運算式算出結果, 請做以下的練習。
變數的應用 用 Visual Basic 的變數, 撰寫計算矩形面積的程式。 請建立新專案 Ch02-03。 step 2 我們要定義兩個變數 height、width 來代表矩形的長、寬,然後再用它來計算矩形面積, 請輸入以下程式:
變數的應用 於 VB 中輸入『Dim height, width』這行宣告變數的敘述後, 在輸入這些變數名稱開頭的字元時, Intellisense 也會在候選清單中列出變數名稱供我們選用。
變數的應用 按[Crtl] +[F5] 鍵, 就會看到如下的執行結果:
變數的應用 電腦程式的功能之一, 就是要讓我們可重覆使用, 例如計算面積的公式只寫一次就好, 以後只要輸入長、寬值, 程式就會替我們算出『長×寬』的結果。 而變數的功能之一就是儲存使用者輸入的、或由檔案/資料庫讀取到的資料, 以供程式進一步處理。不過我們還沒學到如何取得輸入、讀取檔案等, 因此暫時在程式中直接指定變數值。
指定運算子 前面算術運算、變數的應用概念, 和我們已熟悉的數學都相同, 但『=』在 Visual Basic 中的意思, 則和數學的等號大大不同。在Visual Basic 中, = 稱為指定(Assign) 運算子, 它意思是『將等號右邊的值, 指定給等號左邊的變數』。例如範例程式 Ch02-03 第 2、3 行的敘述:
指定運算子 第二個敘述並不是說『height 等於 8』, 而是將等號右邊的 8 指定給等號左邊的變數 height, 說得白話一點就是:『讓 height 變成8』。所以『=』的左邊一定要放可改變其值的變數, 而不可像普通數學算式的等號用法:
指定運算子 由底下的運算式, 可明顯看出 Visual Basic 中的『=』, 和數學的『等號』不同之處:
指定運算子 在數學課中寫出這樣的式子是不合理的, 但在 Visual Basic 中則是合理的。它表示將 height 目前的值加 2 之後, 再指定給 height 自己;簡單的說, 就是讓 height 變數所存的值加 2。
指定運算子 熟悉指定運算子的作用。 請建立新的主控台應用程式專案 Ch02-04。 輸入如下程式內容:
指定運算子 按[Crtl] +[F5] 鍵, 就會看到如下的執行結果:
指定運算子
變數初值的設定 變數在宣告時, 可以同時指定其初值 (Initial Value), 例如: 當然也可以同時指定多個變數的初值:
2-7 接續符號『_』與存取成員符號『.』 除了前面看過的算數運算和指定 (=) 等符號外, 在 Visual Basic 中還有一些特殊符號, 本節先介紹兩個較常用的符號。
敘述接續符號『__』 由於 Visual Basic 敘述是以行為單位, 有時敘述中用到的類別名稱、變數名稱既多且長, 就會使一行敘述變得很長, 在編輯和閱讀時都不太方便。在這種情況下, 我們就可用底線符號 (__) 將同一敘述分成多行。 例如:
敘述接續符號『__』 這個敘述就相當於將下面這個敘述拆成 3 行來寫: 將敘述分成多行時, 只要在原本可插入空白的地方, 都可以分割。例如, 剛才的敘述也可寫成以下形式 (不過閱讀上較不自然):
敘述接續符號『__』 但如果原本不能插入空白的地方, 就不可插入底線字元換行;此外底線和最後一個字元之間, 一定要用一個空白字元隔開。例如下列都是錯誤的用法:
存取成員『.』 『.』這個符號除了在文數字中表示小數點外, 還有另一個用法。『.』 的英文 "dot" 發音近似『的』, 它的另一個用法就是用來表示『的』。例如我們已看過很多次的 Console.WriteLine(), 它的意思就表示『Console 類別的 WriteLine() 方法』。
存取成員『.』 在前一章介紹過, 類別中的方法和屬性統稱為成員 (Member), 而『.』符號就是要存取類別的某個成員。例如 Console 就是主控台類別, 而我們要用此類別提供的 WriteLine() 方法將字串輸出到文字模式視窗中, 就要用『.』來連接 Console 和 WriteLine(), 成為Console.WriteLine()。
存取成員『.』 在 VB 中輸入程式時, 只要是在類別、物件的識別字後接著輸入『.』, 其 Intellisence 功能就會自動列出可使用的成員名稱:
存取成員『.』 我們可以把『.』看做是從屬關係的連接符號, 『.』後面的識別字是附屬於前面的識別字, 或者說『.』前面的識別字擁有後面的識別字。