Visual Basic快捷教程——变量、常量和运算符

一、变量(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"
程序就将无法执行了,因为在程序的执行过程中,常量的值无法被修改。可见常量的使用可以防止不应该被修改的量遭受修改。这正是常量的意义所在。

三、运算符


在程序设计语言中,操作符(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"的逻辑与此类似。下面来看看上述程序代码的执行结果与你预期的是否相同,如下图所示。





*本文中所使用的Visual Studio版本为2017。


(全文完)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 -------------------------------- 数字类型的格式化 --------------------------------     固定格式参数:     General Number 普通数字,如可以用来去掉千位分隔号     format$("100,1
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和系统设置的区域语言的日期和时间格式相关。意思是尽管你用诸如 Format(Now, "MM/dd/yyyy"),如果系统的设置格式区域语言的日期和时间格式分隔符是"-",那他还会显示为 MM-dd-yyyy     只有拼凑: <%response.write
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接添加本ApplicationEvents.vb 到工程即可 ‘添加后还需要一个From用来显示错误。如果到这步还不会则需要先打好基础啦 ‘======================================================== ‘以下事件
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没有认真去找这个方法呀。 https://blog.csdn.net/chzjxgd/article/details/6176325 金蝶K3 BOS的插件官方是用VB6编写的,如果  能用.Net下的语言工具开发BOS插件是一件很愉快的事情,其中缘由不言而喻,而本文则是个人首创,实现在了用V
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String Dim x As Integer, y As Integer, subStr As String If MsgBox("确定要分列处理吗?请确定分列的数据会覆盖它后面的单元格!", _
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) 2 Dim path As String, hash As String 3 For Each fil
  Imports MySql.Data.MySqlClient Public Class Form1 ‘ GLOBAL DECLARATIONS Dim conString As String = "Server=localhost;Database=net2;Uid=root;Pwd=123456;" Dim con As New MySqlConnection
‘導入命名空間 Imports ADODB Imports Microsoft.Office.Interop   Private Sub A1() Dim Sql As String Dim Cnn As New ADODB.Connection Dim Rs As New ADODB.Recordset Dim S As String   S = "Provider=OraOLEDB.Oracl
Imports System.IO Imports System.Threading Imports System.Diagnostics Public Class Form1 Dim A(254) As String    Function ping(ByVal IP As Integer) As String Dim IPAddress As String IPAddress = "10.0.
VB运行EXE程序,并等待其运行结束 参考:https://blog.csdn.net/useway/article/details/5494084 Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Pr
今天碰到一个问题,登陆的时候,如果不需要验证手机号为空,则不去验证手机号 因为登陆的时候所有的验证信息都存放在一个数组里 Dim CheckUserInfo() As String ={UserBirthday, SecEmail, UserMob, UserSex, RealNameFirst, RealName, CheckCardID, CheckCardType, Contactemail
在VB6.0中,数据访问接口有三种: 1、ActiveX数据对象(ADO) 2、远程数据对象(RDO) 3、数据访问对象(DAO) 1.使用ADO(ActiveX Data Objec,ActiveX数据对象)连接SQL Server 1)使用ADO控件连接 使用ADO控件的ConnectionString属性就可以连接SQL Server,该属性包含一个由分号分隔的argument=value语
注:大家如果没有VB6.0的安装文件,可自行百度一下下载,一般文件大小在200M左右的均为完整版的软件,可以使用。   特别提示:安装此软件的时候最好退出360杀毒软件(包括360安全卫士,电脑管家等,如果电脑上有这些软件的话),因为现如今的360杀毒软件直接会对VB6.0软件误报,这样的话就可能会在安装过程中被误报阻止而导致安装失败,或者是安装后缺乏很多必须的组件(其它的杀毒软件或安全卫士之类的
Private Sub Form_Load() Call conndb End Sub Private Function conndb() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim strCn, sql As String Dim db_host As String Dim db_user As String
  PPSM06S70:  Add  moddate  EDITSPRINTJOB:  MAX(TO_CHAR(ETRN.MODDATE, ‘yyyy/mm/dd/HH24:MI AM‘)) ACTUAL_SHIPDATE   4.Test Scenario (1) :Query SQL Test DN:8016578337 SELECT CTRN.TKCTID TRUCK_ID,        
  沒有出現CrystalReportViewer時,須安裝CRforVS_13_0. 新增1個數據集,新增1個數據表,添加二列,列名要和資料庫名一樣. 修改目標Framework 修改app.config, <startup >改成<startup useLegacyV2RuntimeActivationPolicy ="true">  CrystalReport1.rpt增加數據庫專家 在表單
Imports System.Threading Imports System Public Class Form1 Dim th1, th2 As Thread Public Sub Method1() Dim i As Integer For i = 1 To 100 If Me.Label1.BackColor =
Friend Const PROCESS_ALL_ACCESS = &H1F0FFF = 2035711 Friend Const PROCESS_VM_READ = &H10 Friend Const PROCESS_VM_WRITE = &H20 Friend Const PAGE_READONLY = &H2 Friend Const PAGE_READWRITE = &H4 Friend
以下代码随手写的 并没有大量测试 效率也有待提升 如果需要C#的请自行转换 Function SplitBytes(Data As Byte(), Delimiter As Byte()) As List(Of Byte()) Dim i = 0 Dim List As New List(Of Byte()) Dim bytes As New
Imports System.Data.SqlClient Public Class Form1 REM Public conn1 As SqlConnection = New SqlConnection("server=.; Integrated Security=False;Initial Catalog= mydatabase1; User ID= sa;password")