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.
檢查編譯錯誤
在輸入一行程式碼之後,如果此行與藍色波浪底線一起出現 (也會顯示錯誤訊息),則表示陳述式中有語法錯誤。 您必須找出陳述式的錯誤 (例如,藉由查看工作清單,或將滑鼠指標移到錯誤上並閱讀錯誤訊息) 並更正錯誤。 除非您已修正了程式碼中所有的語法錯誤,否則您的程式將無法正確地編譯成功。
相關章節
詞彙 |
定義 |
提供涵蓋指派運算子 (例如,=、*= 和 &=) 的語言參考網頁連結。 |
|
說明如何使用運算子結合項目來產生新的值。 |
|
顯示如何將單一陳述式分成多行,以及如何將多個陳述式放置在同一行。 |
|
顯示如何標記一行程式碼。 |