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) 的任何物件型別。

865x40k4.collapse_all(zh-tw,VS.110).gif初始值

執行包含宣告陳述式的程式碼時,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。

865x40k4.collapse_all(zh-tw,VS.110).gif適合的程式設計項目

指派運算子左邊的程式設計項目必須可以接受和存放值。這表示此項目必須是非 ReadOnly (Visual Basic) 的變數或屬性 (Property),或者必須是陣列元素。在指派陳述式的內容中,這類項目有時會稱為 lvalue,代表「左邊的值」。

指派運算子右邊的值是由運算式所產生,這個值可以由常值 (Literal)、常數、變數、屬性、陣列元素、其他運算式或函式呼叫的任何一項組合所組成。下列範例將說明這點。

x = y + z + findResult(3)

上述範例會將在變數 y 中保留的值加入在變數 z 中保留的值,再將呼叫傳回的值加入函式 findResult。然後,這個運算式的總值會存放在變數 x 中。

865x40k4.collapse_all(zh-tw,VS.110).gif指派陳述式中的資料型別

除了數值以外,指派運算子還會指定 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) 指定給項目,該項目會宣告為從中建立該執行個體的類別。

865x40k4.collapse_all(zh-tw,VS.110).gif複合指派陳述式

「複合指派陳述式」(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".

865x40k4.collapse_all(zh-tw,VS.110).gif指派陳述式中的型別轉換

指定給變數、屬性或陣列元素的值必須是適合該目的項目中的資料型別。一般而言,您應該嘗試產生與該目的項目相同之資料型別的值。不過,某些型別可在指派期間轉換為其他型別。

如需在資料型別之間轉換的詳細資訊,請參閱 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

865x40k4.collapse_all(zh-tw,VS.110).gif隱含行接續

在許多情況下,您可以將陳述式接續到下一個連續行而不必使用底線字元 (_)。下表列出將陳述式隱含接續到下一行程式碼的語法項目。

語法項目

範例

在逗號 (,) 之後。

在左括號 (() 之後,或在右括號 ()) 之前。

在左大括號 ({) 之後,或在右大括號 (}) 之前。

如需詳細資訊,請參閱物件初始設定式:具名和匿名型別 (Visual Basic)集合初始設定式 (Visual Basic)

於 XML 常值內,在左內嵌運算式 (<%=) 之後,或在右內嵌運算式 (%>) 之前。

如需詳細資訊,請參閱 XML 中內嵌的運算式 (Visual Basic)

在串連運算子 (&) 之後。

如需詳細資訊,請參閱運算子 (依功能排列) (Visual Basic)

在指派運算子 (=、&=、:=、+=、-=、*=、/=、\=、^=、<<=、>>=) 之後。

如需詳細資訊,請參閱運算子 (依功能排列) (Visual Basic)

於運算式內,在二元運算子 (+, -、/、*、Mod、<>、<、>、<=、>=、^、>>、<<、And、AndAlso、Or、OrElse、Like、Xor) 之後。

如需詳細資訊,請參閱運算子 (依功能排列) (Visual Basic)

在 Is 和 IsNot 運算子之後。

如需詳細資訊,請參閱運算子 (依功能排列) (Visual Basic)

在成員限定詞字元 (.) 之後以及在成員名稱之前。不過,當您使用 With 陳述式或在初始設定清單中提供型別的值時,必須包含行接續字元 (_),後面接著成員限定詞字元。使用 With 陳述式或物件初始設定清單時,可以考慮在指派 (Assignment) 運算子 (例如,=) 之後分行。

如需詳細資訊,請參閱 With...End With 陳述式 (Visual Basic)物件初始設定式:具名和匿名型別 (Visual Basic)

在 XML 軸屬性限定詞 (. 或 .@ 或 ...) 之後。不過,當您使用 With 關鍵字時,如果指定成員限定詞,則必須包含行接續字元 (_)。

如需詳細資訊,請參閱 XML 軸屬性 (Visual Basic)

指定屬性時,在小於符號 (<) 之後,或者在大於符號 (>) 之前。也可以在您指定屬性時,在大於符號 (>) 之後。不過,當您指定組件層級或模組層級的屬性時,必須包括行接續字元 (_)。

如需詳細資訊,請參閱 屬性 (C# 和 Visual Basic)

在查詢運算子 (Aggregate、Distinct、From、Group By、Group Join、Join、Let、Order By、Select、Skip、Skip While、Take、Take While、Where、In、Into、On、Ascending 和 Descending) 之前和之後。您不可以在由多個關鍵字組成之查詢運算子的關鍵字 (Order By、Group Join、Take While 和 Skip While) 之間分行。

如需詳細資訊,請參閱查詢 (Visual Basic)

於 For Each 陳述式中,在 In 關鍵字之後。

如需詳細資訊,請參閱 For Each...Next 陳述式 (Visual Basic)

於集合初始設定式中,在 From 關鍵字之後。

如需詳細資訊,請參閱 集合初始設定式 (Visual Basic)

加入註解

來源程式碼不一定是自我闡明的,甚至於對撰寫來源程式碼的程式設計人員而言亦是如此。因此,為了協助記錄程式碼文件,大部分的程式設計人員都會大量利用內嵌註解。程式碼中的註解可以為稍後要閱讀或編寫程序或特定指令的使用者,提供說明。由於編譯期間 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.

檢查編譯錯誤

在輸入一行程式碼之後,如果此行與藍色波浪底線一起出現 (也會顯示錯誤訊息),則表示陳述式中有語法錯誤。您必須找出陳述式的錯誤 (例如,藉由查看工作清單,或將滑鼠指標移到錯誤上並閱讀錯誤訊息) 並更正錯誤。除非您已修正了程式碼中所有的語法錯誤,否則您的程式將無法正確地編譯成功。

相關章節

詞彙

定義

指派運算子 (Visual Basic)

提供涵蓋指派運算子 (例如,=、*= 和 &=) 的語言參考網頁連結。

Visual Basic 中的運算子和運算式

說明如何使用運算子結合項目來產生新的值。

HOW TO:在程式碼中中斷和合併陳述式 (Visual Basic)

顯示如何將單一陳述式分成多行,以及如何將多個陳述式放置在同一行。

HOW TO:標記陳述式 (Visual Basic)

顯示如何標記一行程式碼。