zoukankan      html  css  js  c++  java
  • volcanol的工控博客

      说到编程语言,总是绕不开数据类型,因为数据类型决定了数据可以进行什么样的操作。同时数据类型

    从广义上来说是一种数据结构,在过程式编程的过程中,曾经有过这样一种说法:

    程序 = 数据结构 + 算法

      可见数据类型的重要性。大体来说,编程语言有三种: 强类型语言, 弱类型语言,介于两者之间的语言。

    强类型语言要求变量定义的时候必须明确数据类型,弱类型语言不要求在变量定义时明确数据类型。

    一、强类型语言、弱类型语言

      我们所知的C语言系的语言都要求变量定义时明确数据类型,例如C语言、C++、Java语言等都是强类型

    语言。 而VBS等脚本语言,则是弱类型的语言。 这就决定了vbs定义变量时不需要明确数据类型。

      下面是各种语言定义变量时的语法。

    //我是C语言,我是强类型语言
    
    //定义变量时确定数据类型
    int  nAge;   
    //我是C++, 我也是强类型语言
    
    class A
    {
    
    };
    
    //类实例化的时候需要指定对象的类型
    A  objectA;
    //我是Delphi的Pascal, 我也是强类型语言
    
    //定义变量需要指定类型
    var 
        nPage:integer;
    '我是vbs,我是弱类型语言
    
    '定义变量不需要指定数据类型
    Dim varTest

    二、vbs的数据类型

      这篇文章我们简单的来描述一下vbs中数据类型的相关内容。

    'vbs中的数据类型
    'vbs脚本中的数据只有一种数据类型,就是variant
    '可以将vbs变量看成一个具有AI功能的容器,可以识别不同的数据类型
    '更准确的是:
    '1、vbs只有一种数据类型variant
    '2、vbs变量的数据类型都对应一个子类型
    '3、可以将variant看成一个基类,子数据类型看成派生类,
    '4、vbs是具有OOP特性的一种脚本编程语言
    '5、vbs变量在同一时刻,只能表示一种数据类型,或者说只能存储一种
    '   数据类型的数据; 不能既存储Long型又同时存储string型字符串
    '6、vbs变量可以自动为存储的数据选择合适的数据类型
    '7、这里需要说道赋值运算,当一个变量第一次赋值的时候,vbs就假定
    '   这个变量的数据类型为赋值时的子类型。除非再一次赋值,否则就一直
    '   保持第一次赋值的子类型不变
    
    
    
    'vbs中的数据类型检测函数
    '1、vartype 函数, 这个函数返回数据类型的常量信息
    '2、typename 函数,这个函数返回数据类型的字符串信息
    Dim var
    var = 10
    MsgBox VarType(var)
    MsgBox TypeName(var)
    
    var = "volcanol"
    MsgBox VarType(var)
    MsgBox TypeName(var)
    
    '关于输入对话框InputBox的输入处理
    'InputBox输入对话框返回的是字符串
    Dim strDataType
    MsgBox TypeName(InputBox("请输入最大年龄的数值","最大年龄","150"))
    
    '这里需要注意isnumeric函数检查输入的变量是否都是数字
    '如果都是由 0-9 之间的数字组成的,那么返回True,否则返回false
    '这一点需要注意
    If IsNumeric(InputBox("测试输入的值是否是数值","输入数值")) Then
        MsgBox "测试isnumeric函数的作用"
    End If
    
    
    '在vbs中也有与C语言中一样的类型转换:强制类型转换、隐式类型转换
    '强制类型转换通过函数实现
    '隐式类型转换vbs会自动完成
    '再看下面的例子,因为nMaxAge要进行算术减法,所以vbs脚本引擎会将
    'nMaxAge解释为一个int型数据
    Dim nMaxAge
    Dim nMinAge
    Dim nDiffAge
    '第一次赋值的时候,nMaxAge是string类型
    nMaxAge = InputBox("请输入最大年龄的数值","最大年龄","200")
    '第一次赋值的时候
    nMinAge = 0
    MsgBox "第一次赋值后 nMinAge的类型是:" & TypeName(nMinAge)
    '这个地方要进行计算,- 需要的是数字类型,这个地方表达式中
    '会将 nMaxAge 的 string类型隐式类型转换为 double 类型,
    '然后再与nMinAge 进行计算. 需要注意的是隐式类型时的要点。
    nDiffAge = nMaxAge - nMinAge
    MsgBox nDiffAge
    MsgBox "nDiffAge数据类型是:" & TypeName(nDiffAge)
    
    '下面表达式的类型是integer
    MsgBox "1 + 2 表达式的类型是: " & TypeName(1+2)
    
    
    '日期和时间类型
    MsgBox Date()
    MsgBox TypeName(Date())
    MsgBox Time()
    MsgBox TypeName(Time())
    
    '注意日期类型常量的使用两个##符号引用起来的一个字符串,
    '就和下面的例子一样
    MsgBox TypeName(#2018/11/23#)
    MsgBox "日期的数值是:" & CLng(#2018/11/23#)
    MsgBox "数字65535对应的日期是:" & CDate(65535)
    MsgBox "数字0对应的日期是:" & CDate(0)
    MsgBox #1970/1/1#
    
    
    '注意时间的常量与日期常量的不同
    MsgBox TypeName("14:19:29")
    
    
    '前面我们说过 & 和 + 都可以进行字符串的连接
    '因为 + 符号还可以作为加法运算符,因此这里需要注意在
    '使用过程中的隐式类型转换
    '例如我们想输出一个 100234 的字符串
    Dim strTest
    Dim nTest
    strTest = CStr(100)
    nTest = 234
    '不能输出字符串
    MsgBox strTest + nTest
    '可以输出字符串
    MsgBox strTest & nTest
    
    '*******************************************
    ' + 符号的规则
    ' 1、如果两边都是数字,按照数字计算
    ' 2、如果一边是数字类型,则看另一边是否能隐式类型转换为数字
    '    如果能隐式类型转换,则按照数字计算加法求和, 否则就报错
    '
    ' 3、如果两边都是字符串,那么就连接字符串
    '
    ' 4、字符串类型最好用 & 进行连接
    
    
    'Empty 和 NULL
    '如果一个变量未进行初始化则其类型为Empty
    Dim varEmpty
    MsgBox TypeName(varEmpty)
    '下面的函数调用也进行了隐式类型转换,将empty类型的变量转换为string类型
    MsgBox varEmpty
    
    If IsEmpty(varEmpty) Then
        MsgBox "varEmpty变量未初始化"
    End If
    
    '这里还需要注意的是empty这个常量,
    varEmpty = Empty
    If IsEmpty(Empty) Then 
        MsgBox "varEmpty = Empty 赋值后,已经初始化"
    Else
        MsgBox "varEmpty = Empty赋值后,已经初始化,这一段不执行"
    End If
    
    If varEmpty = Empty Then
        MsgBox "varEmpty = Empty 后,其值就是Empty,执行这一段"
    Else
        MsgBox "varEmpty = Empty后,其值是Empty,逻辑结果为真,这一段不执行"
    End If
    
    
    Dim varNull 
    varNull = Null
    MsgBox TypeName(varNull)
    '下面的语句不能执行,这个地方就是NULL和empty的区别
    '而且一般只有显示的给变量赋值为NULL,变量的值才是NULL
    'MsgBox varNull
    
    If IsNull(varNull) Then
        MsgBox "varNull变量的值是NULL"
    End If
    
    If IsEmpty(varNull) Then
        MsgBox "varNull变量没有初始化"
    Else
        MsgBox "varNull变量已经初始化"
    End If

      上面的代码由一个地方需要注意,就是124行那一句,如果直接用msgbox Null 的话会报错。如下面的图

    所示:

    三、Tips

      虽然vbs是一种弱类型的语言,但是这并不妨碍我们编写出合格的健壮的代码。 这里有几个要点可以

    提高代码健壮性。

      1、一个变量只用来做一件事。

      2、利用匈牙利命名法来实现代码的自描述,通过增加前缀来说明变量的类型。

      3、变量在初始化的时候尽量进行强制类型转换。

      4、注意vbs的隐式类型转换规则

      5、注意各种类型的区别。

    --------------------------------------------------------------分割线---------------------------------------------------------------

    1、文章均为个人原创,欢迎转载,转载请保留出处:https://www.cnblogs.com/volcanol/

    2、获取工控PLC、变频器、HMI、计算机、Windows、Linux、嵌入式资料点击:获取资料

    3、如果您觉得文章对您有帮助可转至页面上半部分打赏,或移步:打赏 

    4、或者在页面右下角点推荐哟!!!

    --------------------------------------------------------------分割线------------------------------------------------------------

  • 相关阅读:
    oracle级联删除
    sqlserver 中批量删除 换行符
    SpringBoot与jackson.databind兼容报错问题
    mvn 本地jar包 加入自己的maven仓库
    sql server 表2字段更新到表1,mysql
    sql server 修改表字段
    Spring Boot文件上传
    java如何实现多继承(实现:子类中二个方法,分别继承不同父类)
    SQL SERVER 数据库如何限制一列不能重复(已经有主键)
    SQL server 字段合并CAST(org_no AS VARCHAR(20))+CAST(page_no AS VARCHAR(20))+CAST(djlb_no AS VARCHAR(20)))
  • 原文地址:https://www.cnblogs.com/volcanol/p/10009628.html
Copyright © 2011-2022 走看看