工控随笔_12_西门子_WinCC的VBS脚本_03_变量类型
说到编程语言,总是绕不开数据类型,因为数据类型决定了数据可以进行什么样的操作。同时数据类型
从广义上来说是一种数据结构,在过程式编程的过程中,曾经有过这样一种说法:
程序 = 数据结构 + 算法
可见数据类型的重要性。大体来说,编程语言有三种: 强类型语言, 弱类型语言,介于两者之间的语言。
强类型语言要求变量定义的时候必须明确数据类型,弱类型语言不要求在变量定义时明确数据类型。
一、强类型语言、弱类型语言
我们所知的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 =
MsgBox VarType(var)
MsgBox TypeName(var) var = "volcanol"
MsgBox VarType(var)
MsgBox TypeName(var) '关于输入对话框InputBox的输入处理
'InputBox输入对话框返回的是字符串
Dim strDataType
MsgBox TypeName(InputBox("请输入最大年龄的数值","最大年龄","")) '这里需要注意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("请输入最大年龄的数值","最大年龄","")
'第一次赋值的时候
nMinAge =
MsgBox "第一次赋值后 nMinAge的类型是:" & TypeName(nMinAge)
'这个地方要进行计算,- 需要的是数字类型,这个地方表达式中
'会将 nMaxAge 的 string类型隐式类型转换为 double 类型,
'然后再与nMinAge 进行计算. 需要注意的是隐式类型时的要点。
nDiffAge = nMaxAge - nMinAge
MsgBox nDiffAge
MsgBox "nDiffAge数据类型是:" & TypeName(nDiffAge) '下面表达式的类型是integer
MsgBox "1 + 2 表达式的类型是: " & TypeName(+) '日期和时间类型
MsgBox Date()
MsgBox TypeName(Date())
MsgBox Time()
MsgBox TypeName(Time()) '注意日期类型常量的使用两个##符号引用起来的一个字符串,
'就和下面的例子一样
MsgBox TypeName(#//#)
MsgBox "日期的数值是:" & CLng(#//#)
MsgBox "数字65535对应的日期是:" & CDate()
MsgBox "数字0对应的日期是:" & CDate()
MsgBox #//# '注意时间的常量与日期常量的不同
MsgBox TypeName("14:19:29") '前面我们说过 & 和 + 都可以进行字符串的连接
'因为 + 符号还可以作为加法运算符,因此这里需要注意在
'使用过程中的隐式类型转换
'例如我们想输出一个 100234 的字符串
Dim strTest
Dim nTest
strTest = CStr()
nTest =
'不能输出字符串
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、或者在页面右下角点推荐哟!!!
--------------------------------------------------------------分割线------------------------------------------------------------
工控随笔_12_西门子_WinCC的VBS脚本_03_变量类型的更多相关文章
- 工控随笔_13_西门子_WinCC的VBS脚本_04_变量类型之二
上一个随笔说了一些关于vbs变量类型的内容,这一篇我们继续说说变量类型相关的内容. 一.NULL补充内容 '需要注意的是,NULL不能简单通过 = 来进行比较,而必须通过 'IsNull函数来实现 ' ...
- 工控随笔_15_西门子_WinCC的VBS脚本_05_变量类型之三_VBS数组
数组是一种复杂数据类型,不但有数组本身的数据类型: 数组,还有数组元素中存储的数据的类型. 一.vbs中的数组类型 在VBS中提供了两种数组类型,一种是固定数组,一种是动态数组. 1.固定数组 就是在 ...
- 工控随笔_18_西门子_WinCC的VBS脚本_07_变量作用域和传值、传址
在vbs脚本中也存在和其他编程语言一样的概念,那就是变量的作用域,变量的作用域决 定在什么范围内可以访问. 同样的在vbs脚本中对于变量也有一个生命周期, 变量的生命周期决定了变量的存续时间 这个主要 ...
- 工控随笔_10_西门子_WinCC的VBS脚本_01_基础入门
很多人都认为VB语言或者VBS脚本语言是一种很low的语言,从心里看不起VB或者VBS, 但是其实VBS不仅可以做为系统管理员的利器,同样在工控领域VBS语言大有用武之地. 西门子的WinCC提供了两 ...
- 工控随笔_21_西门子_WinCC的VBS脚本_10_对象_01
最近有点小忙,各种事情,心情也不是很好,烦心事特别多,因此最近更新的比较慢. 不敢再松懈了,今天正好有点时间,就继续看了一下VBScript中关于对象的一些内容. 一.对象 OOP是编程规模发展到一定 ...
- 工控随笔_20_西门子_WinCC的VBS脚本_09_常量和流程控制_02
vbs不但提供了分支结构,还提供了丰富的循环形式.一共有3种循环: 1.for循环 2.do...loop循环 3.while循环 各种循环有各自的特点,在使用的时候可以进行转换. 前面已经描述过Fo ...
- 工控随笔_19_西门子_WinCC的VBS脚本_08_常量和流程控制_01
在编程的过程中,有时候我们会使用一些固定的值,例如圆周率,或者某个人的生日,或者家庭住址等等, 这些信息对于一个对象来说一旦确定就不会改变,因此我们在编程的时候也不希望这些信息会改变,在VBS里面 也 ...
- 工控随笔_17_西门子_WinCC的VBS脚本_06_过程和函数
和其他语言一样,vbs提供了过程和函数机制,通过函数和过程可以优化代码结构和实现代码复用, 减少代码的编写量. 一.代码 具体不再多说,看实例代码. ' vbs的函数和过程 '1.过程式编程是一大编程 ...
- 工控随笔_11_西门子_WinCC的VBS脚本_02_运算符
VBS脚本做为编程语言,提供了很多的运算符,通过这些运算符,可以实现不同的操作.运算符具有不同的类型 不同的运算符之间具有运算优先级. 一.运算符的分类 大体分为以下几类: 1.赋值运算符 2.算术运 ...
随机推荐
- 2019-04-23-day038-数据库的语句
昨日回顾 补充的知识点 server端肯定是确定下来的 mysql的客户端 mysql.exe 直接在命令行就可以运行的 (学习阶段用) navicat等可视化的客户端,是第三方开发的客户端 (开发辅 ...
- SearchView监听关闭正确方案
SearchView往往需要在关闭的时候清除筛选的数据后加载全部数据,但是oncloseListener在高版本的andorid是不起作用的 ,正确的做法应该是取得searchview中那个close ...
- B-食物链-经典并查集
动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人用两种 ...
- 剑指Offer 61. 序列化二叉树 (二叉树)
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 题目地址 https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84 ...
- Delphi7 在Windows 7上无法打开Help选项下帮助文档
发现无法打开Delphi7的帮助文档,百度了一下,问题已经解决. Delphi的帮助文档是*.hlp格式的,而Windows7已经不再带有WinHlp32程序,所以无法再打开此类格式. 此时你需要下载 ...
- 创建Windows服务
windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志.计算机启动时,服务会自动开始 ...
- vue 通知 走马灯效果
封装一个子组件: <template> <div class="container"> <div class="wrap"> ...
- 利用树莓派来安装opencv从而来调动摄像头工作(没有坑,超超自己试过)
超超最近参加了学校里一位特别厉害的老师讲的课(两天,我就从一个小白然后了解了树莓派以及Arduino这些我之前都没有了解过的东西,由于结课的需要,我们需要自己设计一个创意以及完成作品)所以才有了这篇文 ...
- 实验六 CC2530平台上P2P通信的TinyOS编程
实验六 CC2530平台上P2P通信的TinyOS编程 实验目的: 加深和巩固学生对于TinyOS编程方法的理解和掌握 让学生初步的掌握射频通信TinyOS编程方法 学生通过本实验应理解TinyOS中 ...
- Redis事务和实现秒杀功能的实现
今天带着学生学习了Redis的事务功能,Redis的事务与传统的关系型数据库(如MySQL)有所不同,Redis的事务不能回滚. Redis中使用multi.exec.discard.watch.un ...