Statements in Visual Basic
A statement in Visual Basic is a complete instruction. It can contain keywords, operators, variables, constants, and expressions. Each statement belongs to one of the following categories:
Declaration Statements, which name a variable, constant, or procedure, and can also specify a data type.
Executable Statements, which initiate actions. These statements can call a method or function, and they can loop or branch through blocks of code. Executable statements include Assignment Statements, which assign a value or expression to a variable or constant.
This topic describes each category. Also, this topic describes how to combine multiple statements on a single line and how to continue a statement over multiple lines.
Declaration statements
You use declaration statements to name and define procedures, variables, properties, arrays, and constants. When you declare a programming element, you can also define its data type, access level, and scope. For more information, see Declared Element Characteristics.
The following example contains three declarations.
Public Sub ApplyFormat()
Const limit As Integer = 33
Dim thisWidget As New widget
' Insert code to implement the procedure.
End Sub
The first declaration is the Sub
statement. Together with its matching End Sub
statement, it declares a procedure named applyFormat
. It also specifies that applyFormat
is Public
, which means that any code that can refer to it can call it.
The second declaration is the Const
statement, which declares the constant limit
, specifying the Integer
data type and a value of 33.
The third declaration is the Dim
statement, which declares the variable thisWidget
. The data type is a specific object, namely an object created from the Widget
class. You can declare a variable to be of any elementary data type or of any object type that is exposed in the application you are using.
Initial Values
When the code containing a declaration statement runs, Visual Basic reserves the memory required for the declared element. If the element holds a value, Visual Basic initializes it to the default value for its data type. For more information, see "Behavior" in Dim Statement.
You can assign an initial value to a variable as part of its declaration, as the following example illustrates.
Dim m As Integer = 45
' The preceding declaration creates m and assigns the value 45 to it.
If a variable is an object variable, you can explicitly create an instance of its class when you declare it by using the New Operator keyword, as the following example illustrates.
Dim f As New FileInfo("filename")
Note that the initial value you specify in a declaration statement is not assigned to a variable until execution reaches its declaration statement. Until that time, the variable contains the default value for its data type.
Executable statements
An executable statement performs an action. It can call a procedure, branch to another place in the code, loop through several statements, or evaluate an expression. An assignment statement is a special case of an executable statement.
The following example uses an If...Then...Else
control structure to run different blocks of code based on the value of a variable. Within each block of code, a For...Next
loop runs a specified number of times.
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
The If
statement in the preceding example checks the value of the parameter clockwise
. If the value is True
, it calls the spinClockwise
method of aWidget
. If the value is False
, it calls the spinCounterClockwise
method of aWidget
. The If...Then...Else
control structure ends with End If
.
The For...Next
loop within each block calls the appropriate method a number of times equal to the value of the revolutions
parameter.
Assignment statements
Assignment statements carry out assignment operations, which consist of taking the value on the right side of the assignment operator (=
) and storing it in the element on the left, as in the following example.
v = 42
In the preceding example, the assignment statement stores the literal value 42 in the variable v
.
Eligible programming elements
The programming element on the left side of the assignment operator must be able to accept and store a value. This means it must be a variable or property that is not ReadOnly, or it must be an array element. In the context of an assignment statement, such an element is sometimes called an lvalue, for "left value."
The value on the right side of the assignment operator is generated by an expression, which can consist of any combination of literals, constants, variables, properties, array elements, other expressions, or function calls. The following example illustrates this.
x = y + z + FindResult(3)
The preceding example adds the value held in variable y
to the value held in variable z
, and then adds the value returned by the call to function findResult
. The total value of this expression is then stored in variable x
.
Data types in assignment statements
In addition to numeric values, the assignment operator can also assign String
values, as the following example illustrates.
Dim a, b As String
a = "String variable assignment"
b = "Con" & "cat" & "enation"
' The preceding statement assigns the value "Concatenation" to b.
You can also assign Boolean
values, using either a Boolean
literal or a Boolean
expression, as the following example illustrates.
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.
Similarly, you can assign appropriate values to programming elements of the Char
, Date
, or Object
data type. You can also assign an object instance to an element declared to be of the class from which that instance is created.
Compound assignment statements
Compound assignment statements first perform an operation on an expression before assigning it to a programming element. The following example illustrates one of these operators, +=
, which increments the value of the variable on the left side of the operator by the value of the expression on the right.
n += 1
The preceding example adds 1 to the value of n
, and then stores that new value in n
. It is a shorthand equivalent of the following statement:
n = n + 1
A variety of compound assignment operations can be performed using operators of this type. For a list of these operators and more information about them, see Assignment Operators.
The concatenation assignment operator (&=
) is useful for adding a string to the end of already existing strings, as the following example illustrates.
Dim q As String = "Sample "
q &= "String"
' q now contains "Sample String".
Type Conversions in Assignment Statements
The value you assign to a variable, property, or array element must be of a data type appropriate to that destination element. In general, you should try to generate a value of the same data type as that of the destination element. However, some types can be converted to other types during assignment.
For information on converting between data types, see Type Conversions in Visual Basic. In brief, Visual Basic automatically converts a value of a given type to any other type to which it widens. A widening conversion is one in that always succeeds at run time and does not lose any data. For example, Visual Basic converts an Integer
value to Double
when appropriate, because Integer
widens to Double
. For more information, see Widening and Narrowing Conversions.
Narrowing conversions (those that are not widening) carry a risk of failure at run time, or of data loss. You can perform a narrowing conversion explicitly by using a type conversion function, or you can direct the compiler to perform all conversions implicitly by setting Option Strict Off
. For more information, see Implicit and Explicit Conversions.
Putting multiple statements on one line
You can have multiple statements on a single line separated by the colon (:
) character. The following example illustrates this.
Dim sampleString As String = "Hello World" : MsgBox(sampleString)
Though occasionally convenient, this form of syntax makes your code hard to read and maintain. Thus, it is recommended that you keep one statement to a line.
Continuing a statement over multiple lines
A statement usually fits on one line, but when it is too long, you can continue it onto the next line using a line-continuation sequence, which consists of a space followed by an underscore character (_
) followed by a carriage return. In the following example, the MsgBox
executable statement is continued over two lines.
Public Sub DemoBox()
Dim nameVar As String
nameVar = "John"
MsgBox("Hello " & nameVar _
& ". How are you?")
End Sub
Implicit line continuation
In many cases, you can continue a statement on the next consecutive line without using the underscore character (_
). The following syntax elements implicitly continue the statement on the next line of code.
After a comma (
,
). For example:Public Function GetUsername(ByVal username As String, ByVal delimiter As Char, ByVal position As Integer) As String Return username.Split(delimiter)(position) End Function
After an open parenthesis (
(
) or before a closing parenthesis ()
). For example:Dim username = GetUsername( Security.Principal.WindowsIdentity.GetCurrent().Name, CChar("\"), 1 )
After an open curly brace (
{
) or before a closing curly brace (}
). For example:Dim customer = New Customer With { .Name = "Terry Adams", .Company = "Adventure Works", .Email = "terry@www.adventure-works.com" }
For more information, see Object Initializers: Named and Anonymous Types or Collection Initializers.
After an open embedded expression (
<%=
) or before the close of an embedded expression (%>
) within an XML literal. For example:Dim customerXml = <Customer> <Name> <%= customer.Name %> </Name> <Email> <%= customer.Email %> </Email> </Customer>
For more information, see Embedded Expressions in XML.
After the concatenation operator (
&
). For example:cmd.CommandText = "SELECT * FROM Titles JOIN Publishers " & "ON Publishers.PubId = Titles.PubID " & "WHERE Publishers.State = 'CA'"
For more information, see Operators Listed by Functionality.
After assignment operators (
=
,&=
,:=
,+=
,-=
,*=
,/=
,\=
,^=
,<<=
,>>=
). For example:Dim fileStream = My.Computer.FileSystem. OpenTextFileReader(filePath)
For more information, see Operators Listed by Functionality.
After binary operators (
+
,-
,/
,*
,Mod
,<>
,<
,>
,<=
,>=
,^
,>>
,<<
,And
,AndAlso
,Or
,OrElse
,Like
,Xor
) within an expression. For example:Dim memoryInUse = My.Computer.Info.TotalPhysicalMemory + My.Computer.Info.TotalVirtualMemory - My.Computer.Info.AvailablePhysicalMemory - My.Computer.Info.AvailableVirtualMemory
For more information, see Operators Listed by Functionality.
After the
Is
andIsNot
operators. For example:If TypeOf inStream Is IO.FileStream AndAlso inStream IsNot Nothing Then ReadFile(inStream) End If
For more information, see Operators Listed by Functionality.
After a member qualifier character (
.
) and before the member name. For example:Dim fileStream = My.Computer.FileSystem. OpenTextFileReader(filePath)
However, you must include a line-continuation character (
_
) following a member qualifier character when you are using theWith
statement or supplying values in the initialization list for a type. Consider breaking the line after the assignment operator (for example,=
) when you are usingWith
statements or object initialization lists. For example:' Not allowed: ' Dim aType = New With { . ' PropertyName = "Value" ' Allowed: Dim aType = New With {.PropertyName = "Value"} Dim log As New EventLog() ' Not allowed: ' With log ' . ' Source = "Application" ' End With ' Allowed: With log .Source = "Application" End With
For more information, see With...End With Statement or Object Initializers: Named and Anonymous Types.
After an XML axis property qualifier (
.
or.@
or...
). However, you must include a line-continuation character (_
) when you specify a member qualifier when you are using theWith
keyword. For example:Dim customerName = customerXml. <Name>.Value Dim customerEmail = customerXml... <Email>.Value
For more information, see XML Axis Properties.
After a less-than sign (<) or before a greater-than sign (
>
) when you specify an attribute. Also after a greater-than sign (>
) when you specify an attribute. However, you must include a line-continuation character (_
) when you specify assembly-level or module-level attributes. For example:< Serializable() > Public Class Customer Public Property Name As String Public Property Company As String Public Property Email As String End Class
For more information, see Attributes overview.
Before and after query operators (
Aggregate
,Distinct
,From
,Group By
,Group Join
,Join
,Let
,Order By
,Select
,Skip
,Skip While
,Take
,Take While
,Where
,In
,Into
,On
,Ascending
, andDescending
). You cannot break a line between the keywords of query operators that are made up of multiple keywords (Order By
,Group Join
,Take While
, andSkip While
). For example:Dim vsProcesses = From proc In Process.GetProcesses Where proc.MainWindowTitle.Contains("Visual Studio") Select proc.ProcessName, proc.Id, proc.MainWindowTitle
For more information, see Queries.
After the
In
keyword in aFor Each
statement. For example:For Each p In vsProcesses Console.WriteLine("{0}" & vbTab & "{1}" & vbTab & "{2}", p.ProcessName, p.Id, p.MainWindowTitle) Next
For more information, see For Each...Next Statement.
After the
From
keyword in a collection initializer. For example:Dim days = New List(Of String) From { "Mo", "Tu", "We", "Th", "F", "Sa", "Su" }
For more information, see Collection Initializers.
Adding comments
Source code is not always self-explanatory, even to the programmer who wrote it. To help document their code, therefore, most programmers make liberal use of embedded comments. Comments in code can explain a procedure or a particular instruction to anyone reading or working with it later. Visual Basic ignores comments during compilation, and they do not affect the compiled code.
Comment lines begin with an apostrophe ('
) or REM
followed by a space. They can be added anywhere in code, except within a string. To append a comment to a statement, insert an apostrophe or REM
after the statement, followed by the comment. Comments can also go on their own separate line. The following example demonstrates these possibilities.
' 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.
Checking compilation errors
If, after you type a line of code, the line is displayed with a wavy blue underline (an error message may appear as well), there is a syntax error in the statement. You must find out what is wrong with the statement (by looking in the task list, or hovering over the error with the mouse pointer and reading the error message) and correct it. Until you have fixed all syntax errors in your code, your program will fail to compile correctly.
Related sections
Term | Definition |
---|---|
Assignment Operators | Provides links to language reference pages covering assignment operators such as = , *= , and &= . |
Operators and Expressions | Shows how to combine elements with operators to yield new values. |
How to: Break and Combine Statements in Code | Shows how to break a single statement into multiple lines and how to place multiple statements on the same line. |
How to: Label Statements | Shows how to label a line of code. |