工控随笔_17_西门子_WinCC的VBS脚本_06_过程和函数
和其他语言一样,vbs提供了过程和函数机制,通过函数和过程可以优化代码结构和实现代码复用,
减少代码的编写量。
一、代码
具体不再多说,看实例代码。
' vbs的函数和过程 '1、过程式编程是一大编程思想,就和后来的面向对象一样,对于代码的复用
' 和代码的逻辑结构是具有非凡的意义的。
'2、现在的编程语言无论是脚本、解释型语言、编译型语言都具有函数和过程
' 的概念
'3、简单的来说我们可以把函数或者过程看成一个黑盒子,给它原料(输入参数)
' 他们就会生成产品(输出)。
'4、在语法上来看,函数和过程就是一段高度耦合的完成一定功能的代码片段,
' 就是通常说的代码块, 或者说具名代码块,函数名或者过程名就是这段代
' 码的名称
'5、函数返回值,过程不返回值, 但是不返回值不代表不产生输出,这个需要注
' 意 Option Explicit 'vbs 过程
'1、通过 sub 关键字表示定义过程,sub关键字表示具名代码块的开始,
' 通过 end sub 来表示代码块的结束
'2、语法格式
' Sub Procedure_Name(argment 1, argment 2,.......)
' sub code block
' end sub
'
' 下面为中文描述
' Sun 过程名(参数1, 参数2,参数3,.........)
' 过程代码块
' end sub '定义简单的过程
Sub GreetingWorld
MsgBox "Hello world,This is my the very first subprocedure!"
End Sub '调用过程
GreetingWorld '前面说过过程可以接受参数,下面定义接受参数的过程
'需要注意的是,因为vbs只有一种数据类型variant,所以定义过程的时候
'无需定义参数的类型
Sub SayHellow(strName)
MsgBox "Hellow, " & strName & " Nice to meet you!"
End Sub '调用带参数的过程
SayHellow("volcanol") '过程调用,传递参数不需要用()
SayHellow "volcanol" 'vbs函数
'1、vbs函数通过关键字 function 来指定
'2、对于vbs函数来说,其与过程的最大区别就是函数返回值,其他规则
' 一样
'3、在一个区别就是,即使是调用不带参数的函数,也必须有()表示这个是
' 函数
'4、函数的返回值,通过函数名返回,因此在函数内部需要将返回值赋值给
' 函数名, 这里就相当于函数名是一个隐式的变量定义 '定义不带参数的函数
Function fCycle()
fCycle = * 3.1415926 *
End Function Dim fRollCycle
fRollCycle = fCycle() MsgBox "半径为10的圆周的周长为: " & fRollCycle '定义带参数的函数
Function fSum(arg1,arg2)
fSum = arg1 + arg2
End Function '调用带参数的函数
Dim nJackAge
Dim nMikeAge nJackAge =
nMikeAge = MsgBox "Jack and Mike's age sum is: " & fSum(nJackAge,nMikeAge) 'call语句
'在vbs中还有一个语句,用来调用过程,那就是call 语句
'对于函数和过程call语句的方式不一样 '1、不带参数的过程, call语句调用一样
Call GreetingWorld
Call GreetingWorld() '2、带参数的过程
' 带参数的过程调用必须传递参数 '下面这一句不能正确执行
'Call SayHellow "Jesus" Call SayHellow("Jesus") '3、不带参数的函数
'这样就不能将返回的值再次使用,所以没有什么意义
Call fCycle() '4、带参数的函数
'同样没什么意义
Call fSum(,) 'Tips
'1、对于call语句,一般不要使用,两个原因,难打字,而且规则太复杂
'2、对于过程,就不用带括号()调用,这样一般一看就知道是过程
'3、对于函数,即便是不带参数的函数调用,也用括号(),这样一看就知道是函数调用 'Exit sub和Exit Function 语句
'1、有时候函数或过程执行到一半的时候因为已经得到了想要的结果,这个时候如果再往下
'执行未完成的部分,就会耗费资源这个时候就可以提前退出函数或过程
'2、Exit sub 语句退出过程
'3、Exit function 语句退出函数 '退出过程
Sub DisplaySum(lngArg1,lngArg2)
If Not IsNumeric(lngArg1) Or Not IsNumeric(lngArg2) Then
MsgBox "错误的数据类型,将退出执行过程"
Exit Sub
Else
MsgBox CLng(lngArg1) + CLng(lngArg2)
End If
End Sub DisplaySum "volcanol", ""
DisplaySum "","" '退出函数
'退出函数与退出过程有一点不同的就是,在退出函数之前必须为函数设置一个默认返回值
Function fFactorial(nNum)
Dim nFactorial
Dim nLoop '重点要注意这个地方的防御式编程
If Not IsNumeric(nNum) Or Not VarType(nNum) = vbInteger Then
'因为阶乘的值大于等于1,所以返回0可以表示执行出错,在使用这个
'函数的时候,必须先检查返回值是否为0
fFactorial =
MsgBox "参数错误,将退出执行"
Exit Function
Else
'必须注意,没有初始化的变量其值 == 0
nFactorial =
For nLoop = To CLng(nNum)
nFactorial = nFactorial * nLoop
Next
End If
fFactorial = nFactorial
End Function MsgBox fFactorial("volcanol")
MsgBox fFactorial(3.1415926) MsgBox fFactorial()
二、Tips
1、尽量不要用CALL语句
2、如果在函数中使用了Exit Function函数,那么必须要给函数一个替代值
--------------------------------------------------------------分割线---------------------------------------------------------------
1、文章均为个人原创,欢迎转载,转载请保留出处:https://www.cnblogs.com/volcanol/
2、获取工控PLC、变频器、HMI、计算机、Windows、Linux、嵌入式资料点击:获取资料
3、如果您觉得文章对您有帮助可转至页面上半部分打赏,或移步:打赏
4、或者在页面右下角点推荐哟!!!
--------------------------------------------------------------分割线---------------------------------------------------------------
工控随笔_17_西门子_WinCC的VBS脚本_06_过程和函数的更多相关文章
- 工控随笔_10_西门子_WinCC的VBS脚本_01_基础入门
很多人都认为VB语言或者VBS脚本语言是一种很low的语言,从心里看不起VB或者VBS, 但是其实VBS不仅可以做为系统管理员的利器,同样在工控领域VBS语言大有用武之地. 西门子的WinCC提供了两 ...
- 工控随笔_21_西门子_WinCC的VBS脚本_10_对象_01
最近有点小忙,各种事情,心情也不是很好,烦心事特别多,因此最近更新的比较慢. 不敢再松懈了,今天正好有点时间,就继续看了一下VBScript中关于对象的一些内容. 一.对象 OOP是编程规模发展到一定 ...
- 工控随笔_13_西门子_WinCC的VBS脚本_04_变量类型之二
上一个随笔说了一些关于vbs变量类型的内容,这一篇我们继续说说变量类型相关的内容. 一.NULL补充内容 '需要注意的是,NULL不能简单通过 = 来进行比较,而必须通过 'IsNull函数来实现 ' ...
- 工控随笔_20_西门子_WinCC的VBS脚本_09_常量和流程控制_02
vbs不但提供了分支结构,还提供了丰富的循环形式.一共有3种循环: 1.for循环 2.do...loop循环 3.while循环 各种循环有各自的特点,在使用的时候可以进行转换. 前面已经描述过Fo ...
- 工控随笔_19_西门子_WinCC的VBS脚本_08_常量和流程控制_01
在编程的过程中,有时候我们会使用一些固定的值,例如圆周率,或者某个人的生日,或者家庭住址等等, 这些信息对于一个对象来说一旦确定就不会改变,因此我们在编程的时候也不希望这些信息会改变,在VBS里面 也 ...
- 工控随笔_18_西门子_WinCC的VBS脚本_07_变量作用域和传值、传址
在vbs脚本中也存在和其他编程语言一样的概念,那就是变量的作用域,变量的作用域决 定在什么范围内可以访问. 同样的在vbs脚本中对于变量也有一个生命周期, 变量的生命周期决定了变量的存续时间 这个主要 ...
- 工控随笔_15_西门子_WinCC的VBS脚本_05_变量类型之三_VBS数组
数组是一种复杂数据类型,不但有数组本身的数据类型: 数组,还有数组元素中存储的数据的类型. 一.vbs中的数组类型 在VBS中提供了两种数组类型,一种是固定数组,一种是动态数组. 1.固定数组 就是在 ...
- 工控随笔_12_西门子_WinCC的VBS脚本_03_变量类型
说到编程语言,总是绕不开数据类型,因为数据类型决定了数据可以进行什么样的操作.同时数据类型 从广义上来说是一种数据结构,在过程式编程的过程中,曾经有过这样一种说法: 程序 = 数据结构 + 算法 可见 ...
- 工控随笔_11_西门子_WinCC的VBS脚本_02_运算符
VBS脚本做为编程语言,提供了很多的运算符,通过这些运算符,可以实现不同的操作.运算符具有不同的类型 不同的运算符之间具有运算优先级. 一.运算符的分类 大体分为以下几类: 1.赋值运算符 2.算术运 ...
随机推荐
- mybatics 与jpa
mybatics,dao层接口,mapper: public interface UserMapper { @Select("SELECT * FROM T_ROLE WHERE ROLE_ ...
- python基础—列表的使用[]
names = ['zhangyang','guyun','xiangpeng','xuliangchen']print(names[0])print(names[1:3])#切片print(name ...
- vue2.0 + element-ui 通过vue-cli 脚手架搭建的有关网络安全的项目源代码
这次是我进入公司的练手项目,是第一次系统学习vue,做出来的demo是比较低端的,而且不太好看,见谅见谅. 源代码下载路径:https://github.com/Pandora-ps/vue-elem ...
- Android IPC机制—跨进程的观察者模式
在AIDL文件中并不是所有的数据类型都可以使用,AIDL支持的数据类型如下: 基本数据类型(int.long.char.boolean.double等) String和CharSequence Lis ...
- 初学io
IO流: 01.File 创建文件 //创建文件夹 private static void mkdirs() { System.out.println("请您输入创建的文件夹名称:(默认是E ...
- ZIP、tar.gz压缩时排除指定目录
1.ZIP 压缩时排除一个文件夹下所有内容zip -r sss.zip sss/ -x "sss/222/*" 压缩时排除指定多个文件夹下所有内容zip -r sss.zip ss ...
- SQA计划
一.SQA计划 1.软件工程 所做程序是一个长沙大学的学习app系统 .可以实现用户的注册登录,课程学习,以及活动参加.根据需求建模,进行体系结构设计,然后设计. 2.质量保证 (1)项目需要符合IE ...
- Spock - Document -02 - Spock Primer
Spock Primer Peter Niederwieser, The Spock Framework TeamVersion 1.1 This chapter assumes that you h ...
- Node - centOS配置环境
1.安装依赖包:yum install gcc-c++ openssl-devel (gcc版本查询:gcc -v ,为 4.4.7-11:python版本查询:python –version 为2. ...
- Navicat 连接MySQL时出现1251错误的解决方案
我用的MySQL版本是8.0.11,比较新的MySQL版本中采用的加密方式与旧的不同,从而导致1251错误. 解决方案:打开终端连接上数据库,执行以下语句,问题解决.(自己遇到过的坑,亲测有效) US ...