一、变量(Variable)
程序中数据最基本的存储单位就是变量,程序执行时会在计算机内存中开辟空间存储变量。而计算机程序的执行基本就是通过读取或操作这些变量来实现的,所以恰当地使用变量对整个程序的实现是至关重要的。在Visual Basic中要使用变量,就必须先声明它,变量的声明规则如下:
Dim 变量名称 as 变量数据类型变量名称是在程序生命周期内用来指代变量值的别称。就像西游记里唐僧派徒弟去化缘的时候,会指定说要悟空或者八戒前去,“悟空”和“八戒”都是指代唐僧具体某个徒弟的称谓。变量的数据类型其实是定义了变量在系统中(或者内存里)被存储(或者解读)的格式,也定义了变量的具体行为规范。就像西游记里的人物被可以被划分成,取经团队、神仙、妖怪和凡人等类型,属于取经团队的人物应该一心一意求取真经,而属于妖怪的角色则应该一心想吃唐僧肉。例如,要声明一个变量,其名称为i,数据类型为整型(也就是整数),就可以使用如下语句:
Dim i as Integer
一般用Dim表达式声明的局部变量,只会存在于其程序的执行期间;当程序结束时,所有在该程序内的局部变量就都会消失。
正如前面所说的,变量的数据类型定义了变量在系统中被存储的格式以及变量的具体行为规范。因此,适当地使用不同数据类型的变量来储存数据,理应是作为程序开发人员的一项必备技能。同样是一个数值类型,如果选择精度过长的数据类型来储存,可能会导致资源上的浪费,但如果选择精度过短的数据类型来储存,又可能会导致数据溢出。所以,恰如其分地使用数据类型,既能考察开发人员对于编程语言的理解程度,也对实际开发意义重大。Visual Basic中提供了相当丰富的数据类型。下表就列举了其中最为常见的数据类型,读者可以借此建立一个整体的印象。
下面将针对每种不同的数据类型做简单介绍。
Integer
- 内存占用:4 Bytes
- 取值范围:-2,147,483,648 ~ 2,647
- 默认值:0
- 可扩展转换类型:Long,Decimal,Single,Double
Short
- 内存占用:2 Bytes
- 取值范围:-32,768 ~ 32,767
- 默认值:0
- 可扩展转换类型:Integer,Long,Double
Long
- 内存占用:8 Bytes
- 取值范围:-9,223,372,036,854,775,808 ~ 9,807
- 默认值:0
- 可扩展转换类型:Decimal,Double
Single
- 内存占用:4 Bytes
- 取值范围:负值 -3.4028235E+38 ~ -1.401298E-45;正值 1.401298E-45 ~ 3.4028235E+38
- 默认值:0
- 可扩展转换类型:Double
Double
- 内存占用:8 Bytes
- 取值范围:负值 -1.79769313486231570E+308 ~ -4.94065645841246544E-324;正值 4.94065645841246544E-324 ~1.79769313486231570E+308
- 默认值:0
- 可扩展转换类型:无
Boolean
- 内存占用:依赖于执行平台
- 取值范围:TRUE 或 FALSE
- 默认值:FALSE
- 可扩展转换类型:无
String
- 内存占用:依赖于执行平台
- 取值范围:大约20亿个Unicode字符
- 默认值:无
- 可扩展转换类型:无
Date
- 内存占用:8 Bytes
- 取值范围:0:00:00 (midnight) on January 1,0001 ~ 11:59:59 PM on December 31,9999
- 默认值:0:00:00 (midnight) on January 1,0001
- 可扩展转换类型:String
Char
- 内存占用:2 Bytes
- 取值范围:0 ~ 65556
- 默认值:0
- 可扩展转换类型:String
Byte
- 内存占用:1 Bytes
- 取值范围:0 ~ 255
- 默认值: 0
- 可扩展转换类型:Short,UShort,Integer,UInteger,ULong,Double
接下来看一个简单的示例程序。该程序首先声明了一个Single类型的变量,在没有给被声明的变量赋初值时,系统会默认地指定一个缺省值。正如前面所介绍的,对于Single类型的变量,系统指定的缺省值是0。在下面这个例子中,我们将该缺省值输出。通常,出于增强程序鲁棒性的考虑,在声明一个变量时,就应该同时为其赋上一个初始值。在打印系统指定的缺省值之后,为该变量赋上了一个初始值,并将该初始值也打印到屏幕上。
Module Module1 Sub Main() Dim PI As Single Console.WriteLine("The initial value of PI is " & PI.ToString) PI = 3.14159 Console.WriteLine("The current value of PI is " & PI.ToString) Console.ReadLine() End Sub End Module执行上述程序,其结果如下图所示。
注意到在上面的示例代码中,程序先声明了一个PI,此后再给其赋值。我们也可以在一开始声明的时候,就设定它的初值(这也是更多被推荐的做法),其语法如下:
Dim [变量名称] As [变量数据类型] = [变量值]例如:
Dim PI As Single = 3.14159借由上述示例,读者应该已经掌握了变量声明的基本方法。但关于变量的命名规则,其实也应该是一个值得我们在此多解释几句的话题。遵循良好的变量命名规则有助于提高程序的可读性和易维护性。下面几项用户命名的一般规则可供读者参考:
- 变量的第一个字符不能是数字。例如:Dim 01MyValue As Integer 是不被允许。
- 有意义的变量名称可以提高程序代码的可读性。例如:要定义一个用来储存客户地址的变量,那么其变量名就可以是 ClientAddress。
- 匈牙利命名法是实际开发中被广泛使用的一种命名规则。在本系列前面的文章中,有专门介绍匈牙利命名法的篇幅,有兴趣的读者可以参阅。
- 变量名称的命名不能与Visual Basic的关键字相同。
在程序语言中,很多指令都是由具有某种特殊意义的文字所组成的,这些文字就是所谓的“关键字”,或称“保留字”。关键字主要是留给程序语言指令使用的,因此不能用这些保留字来作为变量名,以免编译器在解读程序代码时发生错乱。下表给出了Visual Basic中系统保留的各个关键字,读者在实际编程时要注意避免使用它们来作为变量名。
二、常量(Constant)
在某些时候,虽然声明了一个变量,但却不希望这个变量的数值被修改,这种永远不会被修改的量,就称为常量。一般做法就是在执行程序之前先赋给常量一个默认值,在程序的执行过程中常量的值不会受到任何改动。其实常量的使用也很是广泛,例如定义一个常量PI来存储圆周率,显然圆周率是不会发生变动的。在Visual Basic中,可以借助Const关键字来声明一个常量,其语法规则为:
Const 常量名称 as 常量数据类型 = 常量值此外,在Visual Basic中,也有一些系统内置的常量,它们在打印和显示信息时非常有用,如下表所示:
下面就来编写一个简单的示例程序。该程序声明若干个字符串类型的常量用于存储作家的名字。又声明了几个变量用于存储对应作家的出生日期和代表作。在将这些信息输出到屏幕上时,程序还使用了前面给出的几个Visual Basic中的内置常量,用于调整输出的格式。
Module Module1 Sub Main() Const name01 As String = "Charlotte Bronte" Const name02 As String = "Emily Bronte" Dim birth01 As Date = #4/21/1816# Dim birth02 As Date = #7/30/1818# Dim works01 As String = "Jane Eyre" Dim works02 As String = "Wuthering Heights" Console.Write(name01 & vbTab & birth01.ToShortDateString & vbTab & works01 & vbCrLf) Console.WriteLine(name02 & vbTab & vbTab & birth02.ToShortDateString & vbTab & works02) Console.ReadLine() End Sub End Module执行上述程序代码,其结果如下图所示。易见,通过在Write()函数中使用常量 vbCrLf,实际上实现了同WriteLine()函数一样的功能。
当然,某些读者可能会好奇,为什么要使用常量。就本例而言,作家的名字被存储在常量name01中,而作家的代表作被存储在变量works01中。如果你在当前程序中追加语句:
works01 = "Villette"
- 程序不会有问题,因为works01是一个变量。但是,如果你在当前程序中追加语句:
-
name01="Anne Bronte"
程序就将无法执行了,因为在程序的执行过程中,常量的值无法被修改。可见常量的使用可以防止不应该被修改的量遭受修改。这正是常量的意义所在。
@H_621_502@
三、运算符
在程序设计语言中,操作符(operator)主要用于执行某种特殊的操作,而且这里所谓的“操作”都是针对一个及以上的操作数项目来进行的。数学运算是最常见的操作,所以操作符,更多地被称为是运算符。例如,对于一个加法运算9+6而言,这里的“+”就是一个运算符,而被执行加和操作的具体对象9和6就是所谓的操作数。Visual Basic 中提供的运算符大致可以分为五种:算术运算符、连接运算符、关系运算符、赋值运算符和逻辑运算符。
1、算术运算符
算术运算符(arithmetic operators)是最为常用的一类运算符,它的主要功能就是进行通常意义上的数学运算,例如:加法、加法、乘法和除法等。相信读者对于数学运算应该是再熟悉不过了,经过数学运算所得之结果将是一个具体的数字。Visual Basic 中提供的算术运算符及其说明如下表所示:
注意到上表中还给出了各种算术运算符的优先级,其中优先级1表示最高,2表示次之,其余类推;如果表示优先级的数字相同,即表示拥有相同的优先级。这与我们在初等数学中学习的运算法则是一致的。例如对于算式 9 + 6 - 5 = 10而言,因为加法和减法的优先级相同,所以计算是只要从左到右依次执行即可。但对于算式9 + 6 * 5 = 39而言,因为乘法的优先级更高,所以要先执行乘法计算,然后再做加法。
2、关系运算符
关系运算符(relational operators)又称为比较运算符,它给出了用于比较的两个数值之间的大小关系。这种比较关系最终是由一个布尔值来作为结果的。例如,对于 大小关系 9 > 6,我们知道9确实是大于6的,所以该表达式的结果就是一个TRUE。Visual Basic 中提供的关系运算符及其说明如下表所示:
3、赋值运算符
赋值运算符(assignment operators)用于给变量赋值,例如,a = 1 就是把 1 这个值赋给变量a。注意,等号“=”在Visual Basic 中既是一个表示等价关系的关系运算符,也是一个用于赋值的赋值运算符(而且还是最常用的赋值运算符)。除了简单地用等号来进行赋值以外,还可以结合算术运算符来进行复合赋值运算,例如 a += 2 就是把原来的 a值先加上2再赋给其自身,即等价于 a = a + 2。假设原来 a 的值是1,那么执行a += 2 的操作之后,a 的值就会变成是3。Visual Basic 中提供的赋值运算符及其说明如下表所示:
4、连接运算符
上面介绍的几类运算符所针对的操作数都是数字(当然,你也可以把一个非数值类型的值赋给一个变量)。而连接运算符(concatenation operators)所针对的操作数则变成了字符串,它的作用就是把多个字符串连接成一个新的字符串。Visual Basic 中提供的连接运算符及其说明如下表所示:
5、逻辑运算符
逻辑运算符(logical operators)是根据布尔代数的计算规则,计算两个逻辑表达式的逻辑结果,并返回一个布尔值。特别地,在逻辑运算符中的Not运算符的操作数都只有1个,其余逻辑运算符都要求有2个操作数。Visual Basic 中提供的逻辑运算符及其说明如下表所示:
一个实际编程中的建议是:当需要使用And运算符时,可以直接采用AndAlso运算符来代替And运算符,以加快程序的执行效率,减少无谓的多余判断。当需要使用Or运算符时,可以直接采用OrElse运算符来代替Or运算符,以加快程序的执行效率,减少无谓的多余判断。
在Visual Basic 中,运算符的优先级依次为:算术运算符和连接运算符、比较运算符、逻辑运算符;优先级相同的运算符,按照其在表达式中的位置从左到右依次执行。
下面来看一个例子,在具体执行程序之前,请读者大概猜测一下“A + 1 = B = 0”这句代码所实现的功能。
Module Module1 Sub Main() Dim A As Integer = 5 Dim B As Integer = 6 Dim C As Integer = 7 If A + 1 = B = 0 Then Console.WriteLine("A + 1 is unequal to B.") Else Console.WriteLine("A + 1 is equal to B.") End If If A + 1 = C = -1 Then Console.WriteLine("A + 1 is equal to C.") Else Console.WriteLine("A + 1 is unequal to C.") End If Console.ReadLine() End Sub End Module
在一般的程序语言里,布尔值TRUE和FALSE一般都有指定的数值,在Visual Basic中,TRUE 的值等于 -1,FALSE 的值等于 0。执行 A+1=B=0,根据运算符优先级的顺序,可以理解为先执行关系运算 A+1,然后执行第一个等号所连接的一个关系表达式,即判断A+1=B的结果,如果A+1与B确实相等则返回 TRUE,然后执行 TRUE = 0 的 运算,显然 这个等式不成立(TRUE会被转换为-1),所以结果为 FALSE。反之亦然。执行语句"A + 1 = C = -1"的逻辑与此类似。下面来看看上述程序代码的执行结果与你预期的是否相同,如下图所示。
(全文完)
原文链接:https://www.f2er.com/vb/256511.html