Visual Basic 中的陳述式
Visual Basic 中的陳述式是完整的指令。它可包含關鍵字、運算子、變數、常數及運算式。每個陳述式分別屬於下列分類的其中一種:
宣告陳述式:用以命名變數、常數或程序,並且也可以指定資料型別。
可執行的陳述式:負責啟始動作。這些陳述式可以呼叫方法或函式,並且可以在整個程式碼區塊內執行迴圈或分支的動作。可執行的陳述式包括指派陳述式 (Assignment Statement),用以將值或運算式指派給變數或常數。
本主題說明每一種分類。此外,本主題還說明如何將多個陳述式合併到一行,以及如何在多行繼續一個陳述式。
宣告陳述式
您可以使用宣告陳述式,進行程序、變數、屬性 (Property)、陣列及常數的命名和定義。當您宣告程式設計項目時,也可以定義資料型別、存取層級及範圍。如需詳細資訊,請參閱宣告項目特性 (Visual Basic)。
下列範例包含三種宣告。
Public Sub applyFormat()
Const limit As Integer = 33
Dim thisWidget As New widget
' Insert code to implement the procedure.
End Sub
第一種宣告為 Sub 陳述式。它會和對應的 End Sub 陳述式一起宣告名為 applyFormat 的程序。它也會指定 applyFormat 為 Public,這表示所有可以參考它的程式碼都可以呼叫它。
第二種宣告為 Const 陳述式,它會宣告常數 limit,指定 Integer 資料型別及值 33。
第三種宣告為 Dim 陳述式,它會宣告變數 thisWidget。資料型別為特定物件,也就是從 Widget 類別建立的物件。您可以將變數宣告為任何基礎資料型別 (Elementary Data Type),或所使用之應用程式中公開 (Expose) 的任何物件型別。
初始值
執行包含宣告陳述式的程式碼時,Visual Basic 會保留宣告項目所需的記憶體。如果項目會儲存值,Visual Basic 就會將該項目初始化為資料型別的預設值。如需詳細資訊,請參閱 Dim 陳述式 (Visual Basic) 中的<行為>一節。
您可以將初始值指派給變數做為宣告的一部分,如下列範例所示。
Dim m As Integer = 45
' The preceding declaration creates m and assigns the value 45 to it.
如果變數是物件變數,當您使用 New 運算子 (Visual Basic) 關鍵字進行宣告時,可以明確建立物件的類別執行個體,如下列範例所示。
Dim f As New System.Windows.Forms.Form()
請注意,您在宣告陳述式中所指定的初始值要在執行到宣告陳述式之後,才會指派給變數。在那之前,變數會包含資料型別的預設值。
可執行的陳述式
可執行的陳述式會執行動作。它可以呼叫程序、分支至程式碼中的另一個位置、對數個陳述式執行迴圈,或評估運算式。指派陳述式 (Assignment Statement) 是可執行的陳述式的特殊案例。
下列範例會使用 If...Then...Else 控制結構,依據變數值執行不同的程式碼區塊。在每一個程式碼區塊內,For...Next 迴圈會執行指定的次數。
Public Sub startWidget(ByVal aWidget As widget,
ByVal clockwise As Boolean, ByVal revolutions As Integer)
Dim counter As Integer
If clockwise = True Then
For counter = 1 To revolutions
aWidget.spinClockwise()
Next counter
Else
For counter = 1 To revolutions
aWidget.spinCounterClockwise()
Next counter
End If
End Sub
上述範例中的 If 陳述式會檢查參數 clockwise 的值。如果值為 True,它會呼叫 aWidget 的 spinClockwise 方法。如果值為 False,它會呼叫 aWidget 的 spinCounterClockwise 方法。If...Then...Else 控制結構會以 End If 結束。
每一個區塊內的 For...Next 迴圈會呼叫適當的方法數次 (等於 revolutions 參數值)。
指派陳述式
指派陳述式會執行指派作業,此作業包含取得指派運算子 (=) 右邊的值,然後將此值存放在左邊的項目中,如下列範例所示。
v = 42
在上述範例中,指派陳述式會在變數 v 中存放常值 42。
適合的程式設計項目
指派運算子左邊的程式設計項目必須可以接受和存放值。這表示此項目必須是非 ReadOnly (Visual Basic) 的變數或屬性 (Property),或者必須是陣列元素。在指派陳述式的內容中,這類項目有時會稱為 lvalue,代表「左邊的值」。
指派運算子右邊的值是由運算式所產生,這個值可以由常值 (Literal)、常數、變數、屬性、陣列元素、其他運算式或函式呼叫的任何一項組合所組成。下列範例將說明這點。
x = y + z + findResult(3)
上述範例會將在變數 y 中保留的值加入在變數 z 中保留的值,再將呼叫傳回的值加入函式 findResult。然後,這個運算式的總值會存放在變數 x 中。
指派陳述式中的資料型別
除了數值以外,指派運算子還會指定 String 值,如下列範例所示。
Dim a, b As String
a = "String variable assignment"
b = "Con" & "cat" & "enation"
' The preceding statement assigns the value "Concatenation" to b.
您也可以使用 Boolean 常值或 Boolean 運算式指定 Boolean 值,如下列範例所示。
Dim r, s, t As Boolean
r = True
s = 45 > 1003
t = 45 > 1003 Or 45 > 17
' The preceding statements assign False to s and True to t.
同樣地,可以將適當的值指定給 Char、Date 或 Object 資料型別的程式設計項目。也可以將物件執行個體 (Instance) 指定給項目,該項目會宣告為從中建立該執行個體的類別。
複合指派陳述式
「複合指派陳述式」(Compound Assignment Statement) 在將運算式指定給程式設計項目之前,會先在運算式上執行作業。下列範例會說明其中一個運算子 +=,藉由右邊運算式的值遞增運算子左邊的變數值。
n += 1
上述範例會加 1 至 n 值,然後在 n 中存放該新值。它是與下列陳述式相等的速寫法:
n = n + 1
可使用此類型的運算子來執行各種複合式指派運算。如需這些運算子的清單和它們的詳細資訊,請參閱指派運算子 (Visual Basic)。
串連指派運算子 (&=) 對於將字串加入已存在字串的結尾來說非常有用,如下列範例所示。
Dim q As String = "Sample "
q &= "String"
' q now contains "Sample String".
指派陳述式中的型別轉換
指定給變數、屬性或陣列元素的值必須是適合該目的項目中的資料型別。一般而言,您應該嘗試產生與該目的項目相同之資料型別的值。不過,某些型別可在指派期間轉換為其他型別。
如需在資料型別之間轉換的詳細資訊,請參閱 Visual Basic 中的型別轉換。簡單地說,Visual Basic 會自動將提供的型別值轉換為它擴展的其他型別。「擴展轉換」(Widening Conversion) 一定會在執行階段順利完成,並且不會遺失任何資料。例如,因為 Visual Basic 將 Integer 擴展至 Double,因此會在適用時將 Integer 值轉換為 Double。如需詳細資訊,請參閱擴展和縮小轉換 (Visual Basic)。
「縮小轉換」(Narrowing Conversion) (不是擴展的轉換) 在執行階段會帶來失敗的風險,或造成資料遺失。您可以使用型別轉換函式明確地執行縮小轉換,或者設定 Option Strict Off,將編譯器 (Compiler) 導向為隱含地執行所有轉換。如需詳細資訊,請參閱隱含和明確轉換 (Visual Basic)。
在一行上放置多個陳述式
您可以用冒號 (:) 字元分隔,在單行上撰寫多個陳述式。下列範例將說明這點。
Dim sampleString As String = "Hello World" : MsgBox(sampleString)
儘管有時候很方便,但是此形式的語法會使您的程式碼難以閱讀及維護。因此,建議您維持一行一個陳述式。
在多行上繼續一個陳述式
陳述式通常會撰寫在一行上,但是當太長時,您可以使用行接續字元 (Line-Continuation Character) 在下一行繼續該陳述式,行接續字元是由底線字元 (_) 之後接著歸位字元 (Carriage Return) 所組成。在下列範例中,會在兩行上繼續 MsgBox 可執行的陳述式。
Public Sub demoBox()
Dim nameVar As String
nameVar = "John"
MsgBox("Hello " & nameVar _
& ". How are you?")
End Sub
隱含行接續
在許多情況下,您可以將陳述式接續到下一個連續行而不必使用底線字元 (_)。下表列出將陳述式隱含接續到下一行程式碼的語法項目。
加入註解
來源程式碼不一定是自我闡明的,甚至於對撰寫來源程式碼的程式設計人員而言亦是如此。因此,為了協助記錄程式碼文件,大部分的程式設計人員都會大量利用內嵌註解。程式碼中的註解可以為稍後要閱讀或編寫程序或特定指令的使用者,提供說明。由於編譯期間 Visual Basic 會忽略註解,因此註解並不會影響編譯的程式碼。
註解行是以所有格符號 (') 或 REM 做為開頭,後面接著一個空格。它們可以加在程式碼的任何一處,但字串除外。若要將註解附加至陳述式,請在陳述式之後插入所有格符號 (Apostrophe) 或在 REM,之後接著註解。註解也可出現在自己的分隔行中。下列範例為這些可能情況。
' This is a comment on a separate code line.
REM This is another comment on a separate code line.
x += a(i) * b(i) ' Add this amount to total.
MsgBox(statusMessage) REM Inform operator of status.
檢查編譯錯誤
在輸入一行程式碼之後,如果此行與藍色波浪底線一起出現 (也會顯示錯誤訊息),則表示陳述式中有語法錯誤。您必須找出陳述式的錯誤 (例如,藉由查看工作清單,或將滑鼠指標移到錯誤上並閱讀錯誤訊息) 並更正錯誤。除非您已修正了程式碼中所有的語法錯誤,否則您的程式將無法正確地編譯成功。
相關章節
詞彙 |
定義 |
提供涵蓋指派運算子 (例如,=、*= 和 &=) 的語言參考網頁連結。 |
|
說明如何使用運算子結合項目來產生新的值。 |
|
顯示如何將單一陳述式分成多行,以及如何將多個陳述式放置在同一行。 |
|
顯示如何標記一行程式碼。 |