跳转至内容

Visual Basic/语言

来自维基教科书,自由的教科书

许多计算机语言共享一组核心功能。有时它们在不同的语言中非常相似,有时则截然不同。一种语言的用户认为不可或缺的功能,在其他完全可用的语言中可能完全缺失。

Visual Basic 中的语句就像给计算机发出命令一样。函数和子例程是由语句组成的。

语句通常由一个子例程的名称后跟一个参数列表组成

Debug.Print "Hello World"

第一个词 (Debug) 是 Visual Basic 中内置对象的名称。第二个词 (Print) 是该对象方法的名称。“Hello World” 是该方法的参数。结果是

 Hello World

打印到立即窗口

在 Visual Basic Classic 中,子例程调用语句可以用两种方式编写

  x "Hello", "World"
  Call x("Hello", "World")

x 是一个接受两个字符串参数的子例程。关键字Call 是 Basic 较早版本遗留下来的。如果您使用这种形式,则必须将整个参数列表括在圆括号中。有时程序员想要调用一个函数,但对返回值不感兴趣,只对副作用感兴趣。在这种情况下,他会像调用子例程一样调用该函数,但只能使用上面的第一种形式。

还有其他更复杂的语句,它们可以跨越多行代码

  • If..Else..End If
  • Do While..Loop

这些复合语句包括其他语句和表达式。

与大多数编程语言一样,Visual Basic 能够使用和处理命名变量及其内容。变量最简单的描述是,我们用来引用内存中某个位置的名称——一个存储我们正在处理的值的位置。

将变量想象成“鸽笼”或值的占位符通常会有所帮助。您可以将变量视为与其值等效。因此,如果您有一个初始化为 4 的变量i,则i+1 将等于5

在 Visual Basic 中,变量可以在使用前声明,也可以让编译器为它们分配空间。对于除最简单的程序之外的所有程序,最好声明所有变量。这有几个好处

  • 您可以获得所需的类型,而不是Variant
  • 编译器有时可以检查您是否使用了正确的类型。

Visual Basic 中所有变量都是类型化的,即使那些声明为Variant 的变量也是如此。如果您没有指定类型,则编译器将使用 Variant。Variant 变量是可以保存任何类型数据的变量。

变量声明

[编辑 | 编辑源代码]

以下是如何声明一个整数的示例,我们将其命名为some_number

 Dim some_number As Integer

您也可以使用一个语句声明多个变量

Dim anumber, anothernumber, yetanothernumber As Integer

这不是一个好主意,因为很容易忘记在 Visual Basic 中,类型名称只适用于紧邻其前的变量名。该示例声明了两个Variants 和一个Integer

您可以通过这个小程序来演示实际情况

  Option Explicit
  
  Public Sub main()
    
    Dim anumber, anothernumber, yetanothernumber As Integer
    Dim v As Variant
    
    Debug.Print TypeName(anumber), VarType(anumber), _
         TypeName(anothernumber), VarType(anothernumber), _
         TypeName(yetanothernumber), VarType(yetanothernumber)
    
    Debug.Print TypeName(anumber), VarType(v)
    
    Debug.Print "Assign a number to anumber"
    anumber = 1
    Debug.Print TypeName(anumber), VarType(anumber)
    
    Debug.Print "Assign a string to anumber"
    anumber = "a string"
    Debug.Print TypeName(anumber), VarType(anumber)
    
  End Sub

结果是

 Empty          0            Empty          0            Integer        2 
 Empty          0 
 Assign a number to anumber
 Integer        2 
 Assign a string to anumber
 String         8

请注意,VarType 和 TypeName 都返回有关存储在 Variant 内部的变量的信息,而不是有关 Variant 本身的信息。

因此,要依次声明三个整数,请使用

Dim anumber As Integer, anothernumber As Integer, yetanothernumber As Integer

在 Visual Basic 中,无法将声明初始化与变量结合起来(因为 VB 不支持构造函数——尽管请参阅对象和初始化),以下语句是非法的

Dim some_number As Integer = 3

只有常量声明允许您这样做

Const some_number As Integer = 3

在 Visual Basic 中,变量可以在子例程、函数或属性的内部任何地方声明,它们的范围限于该例程。它们也可以在模块的声明部分声明,该部分位于任何子例程、函数或属性之前,它们具有模块级范围。

默认情况下,变量无需在使用前声明。以这种方式创建的任何变量都将是Variant 类型。这种行为可以通过在模块顶部使用 Option Explicit 语句来覆盖,这将强制程序员在使用前声明所有变量。

声明变量后,您可以使用以下语句稍后为变量赋值

Let some_number = 3

Let 关键字是可选的,因此

some_number = 3

也是一个有效的语句。

您还可以将一个变量赋值给另一个变量,如下所示

anumber = anothernumber

在 Visual Basic 中,您无法使用一个语句为多个变量赋相同的值。以下语句不会像 C 程序员期望的那样工作

anumber = anothernumber = yetanothernumber = 3

相反,它将除第一个= 符号之外的所有= 符号视为等式测试运算符,然后根据anothernumberyetanotherniumber 的值,将TrueFalse 分配给anumber

变量命名

[编辑 | 编辑源代码]

Visual Basic 中的变量名由字母(大写和小写)和数字组成。下划线字符“_”也被允许。名称不能以数字开头。名称可以任意长。

一些有效的(但不太描述性的)Visual Basic 变量名的示例

 foo
 Bar
 BAZ
 foo_bar
 a_foo42_
 QuUx

一些无效的 Visual Basic 变量名的示例

2foo
不能以数字开头
my foo
名称中不允许使用空格
$foo
$ 不允许——只能使用字母、数字和 _
while
语言关键字不能用作名称
_xxx
不允许使用前导下划线。

某些词是语言中的保留关键字,这些词不能用作变量名,也不能用作其他任何事物的名称。

此外,还有一些名称集,虽然不是语言关键字,但出于某种原因被保留。

变量的命名规则也适用于其他语言结构,例如函数名和模块名。

养成使用描述性变量名的习惯是一个好习惯。如果您在创建代码的几个月后查看一段代码,并看到变量var1var2 等,您很可能不知道它们控制什么。诸如textinputtime_start 之类的变量名更具描述性——您确切地知道它们的作用。如果您的变量名包含多个单词,则习惯上用大写字母开始下一个单词。请记住,您不能在变量名中使用空格,合理的首字母大写更易于区分单词。稍后在代码中键入变量名时,您可以全部使用小写——一旦您离开相关行,如果变量名是有效的 VB,它将根据需要大写。

字面量

[编辑 | 编辑源代码]

在程序中,您显式指定值而不是引用变量或其他形式的数据,该值被称为字面量。在上面的初始化示例中,3 是一个字面量。数字可以写成整数、小数、“科学”表示法或十六进制。要识别十六进制数,只需在数字前面加上 &H。

条件子句是仅在特定表达式(条件)为真时才会执行的代码块。

If 语句

[编辑 | 编辑源代码]

If 语句是最灵活的条件语句:请参阅 分支

Select Case

[编辑 | 编辑源代码]

通常,需要将一个特定变量与多个值进行比较。对于这种条件表达式,使用Select Case 语句。

无条件语句

[编辑 | 编辑源代码]

无条件语句 允许您在没有条件的情况下更改程序的流程。这些语句包括 Exit、End 和 Goto 语句。

循环 允许您将一组语句重复执行多次。

要重复执行一段代码一定的次数,或者对列表中的每个元素执行一次,请参阅 For..Next 循环


上一节:案例研究 目录 下一节:编码规范
华夏公益教科书