控制流
在 Visual Basic 教程的这一部分中,我们将讨论流控制。 我们将定义几个关键字,使我们能够控制 Visual Basic 程序的流程。
在 Visual Basic 语言中,有几个关键字可用于更改程序的流程。 当程序运行时,语句从源文件的顶部到底部执行。 逐一。 可以通过特定的关键字更改此流程。 语句可以执行多次。 一些语句称为条件语句。 仅在满足特定条件时才执行它们。
If
语句
If
语句具有以下一般形式:
If (expression)
statement
End If
If
关键字用于检查表达式是否为真。 如果为true
,则执行一条语句。 该语句可以是单个语句或复合语句。 复合语句由If/End If
块包围的多个语句组成。
Option Strict On
Module Example
Dim num As Byte = 31
Sub Main()
If (num > 0)
Console.WriteLine("num variable is positive")
End If
End Sub
End Module
我们有一个num
变量。 它被分配为 31。If
关键字检查布尔表达式。 表达式放在方括号之间。 31 > 0
为true
,因此将执行块内的语句。
$ ./ifstatement.exe
num variable is positive
满足条件,并将消息写入控制台。
Option Strict On
Module Example
Dim num As Byte = 31
Sub Main()
If (num > 0)
Console.WriteLine("num variable is positive")
Console.WriteLine("num variable equals {0}", num)
End If
End Sub
End Module
可以在由If
和End If
关键字创建的块内执行更多语句。
我们可以使用Else
关键字来创建一个简单的分支。 如果If
关键字后方括号内的表达式的值为假,则将自动执行Else
关键字后方的语句。
Option Strict On
Module Example
Dim sex As String
Sub Main()
sex = "female"
If (sex = "male")
Console.WriteLine("It is a boy")
Else
Console.WriteLine("It is a girl")
End If
End Sub
End Module
我们有性别变量。 它具有"female"
字符串。 布尔表达式的计算结果为false
,我们在控制台中得到"It is a girl"
。
$ ./branch.exe
It is a girl
我们可以使用Else If
关键字创建多个分支。 仅当不满足先前条件时,Else If
关键字才会测试其他条件。 请注意,我们可以在测试中使用多个Else If
关键字。
Option Strict On
Module Example
Dim a As Byte = 0
Sub Main()
If (a < 0)
Console.WriteLine("a is negative")
Else If (a = 0)
Console.WriteLine("a equals to zero")
Else
Console.WriteLine("a is a positive number")
End If
End Sub
End Module
我们有一个数值变量,并测试它是否为负数或正数或等于零。 第一个表达式的计算结果为false
。 满足第二个条件。 程序在控制台上输出a equals to zero
。 分支的其余部分将被跳过。
Select
语句
Select
语句是选择控制流语句。 它允许变量或表达式的值通过多路分支控制程序执行的流程。 与使用If
和Else If
语句的组合相比,它以更简单的方式创建多个分支。
我们有一个变量或一个表达式。 Select
关键字用于根据值列表测试变量或表达式中的值。 值列表用Case
关键字显示。 如果值匹配,则执行Case
之后的语句。 有一个可选的Case Else
语句。 如果找不到其他匹配项,则执行该命令。
Option Strict On
Module Example
Dim domain As String
Sub Main()
domain = Console.ReadLine()
Select domain
Case "us"
Console.WriteLine("United States")
Case "de"
Console.WriteLine("Germany")
Case "sk"
Console.WriteLine("Slovakia")
Case "hu"
Console.WriteLine("Hungary")
Case Else
Console.WriteLine("Unknown")
End Select
End Sub
End Module
在我们的程序中,我们有一个域变量。 我们从命令行读取变量的值。 我们使用Case
语句测试变量的值。 有几种选择。 例如,如果该值等于"us"
,则将"United States"
字符串打印到控制台。
$ ./selectcase.exe
hu
Hungary
我们在控制台输入了"hu"
字符串,程序以"Hungary"
作为响应。
使用Select
关键字可以验证一系列数字个案。
Option Strict On
Module Example
Dim age As Byte
Sub Main()
Try
age = Console.ReadLine()
Catch
Console.WriteLine("Invalid value")
End
End Try
Select age
Case 0 To 21
Console.WriteLine("Junior")
Case 22 To 60
Console.WriteLine("Adult")
Case Else
Console.WriteLine("Senior")
End Select
End Sub
End Module
前面的程序使用数值范围来标识一个人的年龄组。
Try
age = Console.ReadLine()
Catch
Console.WriteLine("Invalid value")
End
End Try
从控制台读取一个值。 我们只能使用数值数据。 Try
,Catch
和End Try
关键字用于异常处理。 如果引发异常,则执行Catch
关键字之后的语句。 End
语句终止程序。
Case 0 To 21
Console.WriteLine("Junior")
在这里,我们指定一个值范围。 如果用户输入的值在 0 到 21 之间(包括 0 和 21),则程序将在控制台上打印"Junior"
。
$ ./agerange.exe
43
Adult
我们输入了 43,程序以Adult
字符串作为响应。
While
语句
While
语句是一个控制流语句,它允许根据给定的布尔条件重复执行代码。
这是While
循环的一般形式:
While (expression):
statement
End While
While
关键字在While
和End While
关键字包围的块内执行语句。 每次将表达式求值为true
时都会执行这些语句。
Option Strict On
Module Example
Sub Main()
Dim i As Integer = 0
Dim sum As Integer = 0
While i < 10
i = i + 1
sum += i
End While
Console.WriteLine(sum)
End Sub
End Module
在代码示例中,从一系列数字计算值的总和。
While
循环包含三个部分:初始化,测试和更新。 语句的每次执行都称为循环。
Dim i As Integer = 0
我们启动i
变量。 它用作计数器。
While i < 10
...
End While
While
关键字后面的表达式是第二阶段,即测试。 执行主体中的语句,直到表达式的计算结果为false
。
i = i + 1
While
循环的最后一个第三阶段。 正在更新。 我们增加计数器。 请注意,对While
循环的不正确处理可能会导致循环不断。
可以至少运行一次该语句。 即使不满足条件。 为此,我们可以使用Do
和Loop While
关键字。
Option Strict On
Module Example
Sub Main()
Dim count As Integer = 0
Do
Console.WriteLine(count)
Loop While (count <> 0)
End Sub
End Module
首先执行迭代,然后求值真值表达式。
For Next
语句
如果在启动循环之前知道周期数,则可以使用For Next
语句。 在此构造中,我们声明一个计数器变量,该变量在每次循环重复期间都会自动增加或减少值。
Option Strict On
Module Example
Sub Main()
For i As Integer = 0 To 9
Console.WriteLine(i)
Next
End Sub
End Module
在此示例中,我们将数字0..9
打印到控制台。
For i As Integer = 0 To 9
Console.WriteLine(i)
Next
我们将计数器 i 初始化为零。 Next
语句将计数器增加一,直到计数器等于 9。
Visual Basic 具有可选的Step
关键字。 它控制计数器变量如何增加或减少。
Option Strict On
Module Example
Sub Main()
For i As Integer = 9 To 0 Step -1
Console.WriteLine(i)
Next
End Sub
End Module
在上面的示例中,我们以相反的顺序打印数字 0..9。
For i As Integer = 9 To 0 Step -1
Console.WriteLine(i)
Next
该步骤也可以是负数。 我们将计数器初始化为 9。每次迭代,计数器都将减小步长值。
For Each
语句
For Each
构造简化了遍历数据集合的过程。 它没有明确的计数器。 For Each
语句一个接一个地遍历数组或集合,并将当前值复制到构造中定义的变量中。
Option Strict On
Module Example
Sub Main()
Dim planets() As String = { "Mercury", "Venus", _
"Earth", "Mars", "Jupiter", "Saturn", _
"Uranus", "Neptune" }
For Each planet As String In planets
Console.WriteLine(planet)
Next
End Sub
End Module
在此示例中,我们使用For Each
语句遍历一系列行星。
For Each planet As String In planets
Console.WriteLine(planet)
Next
For Each
语句的用法很简单。 planets
是我们迭代通过的数组。 planet
是一个临时变量,具有数组中的当前值。 For Each
语句遍历所有行星并将它们打印到控制台。
$ ./planets.exe
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
运行上面的 Visual Basic 程序将给出此输出。
Exit
,Continue
语句
Exit
语句可用于终止由While
,For
或Select
语句定义的块。
Option Strict On
Module Example
Dim val As Integer
Sub Main
While (True)
val = CType((30 * Rnd), Integer) + 1
Console.Write(val.ToString & " ")
If (val = 22)
Exit While
End If
End While
Console.Write(vbNewLine)
End Sub
End Module
我们定义了一个无限的While
循环。 只有一种方法可以跳出这样的循环。 我们必须使用Exit While
语句。 我们从 1 到 30 中选择一个随机值。我们打印该值。 如果该值等于 22,则结束无穷的while
循环。
$ ./exitstm.exe
30 12 13 20 19 4 2 9 6 9 22
我们可能会得到这样的东西。
Continue
语句用于跳过循环的一部分,并继续循环的下一个迭代。 它可以与Do
,For
和While
语句结合使用。
在下面的示例中,我们将打印一个数字列表,这些数字不能除以 2 而没有余数。
Option Strict On
Module Example
Dim num As Integer = 0
Sub Main()
While (num < 1000)
num = num + 1
If ((num Mod 2) = 0)
Continue While
End If
Console.Write(num.ToString() + " ")
End While
Console.Write(vbNewLine)
End Sub
End Module
我们使用While
循环遍历数字1..999
。
If ((num Mod 2) = 0)
Continue While
End If
如果表达式num Mod 2
返回 0,则可以将所讨论的数字除以 2。执行Continue
语句,并跳过循环的其余部分。 在我们的例子中,循环的最后一条语句将被跳过,并且数字不会输出到控制台。 下一个迭代开始。
在 Visual Basic 教程的这一部分中,我们讨论的是控制流结构。