Lotus Script语法基础篇注释注释在程序运行中并不执行,只是让程序员在编写程序的时候添加的一些标记性的文字,但他的作用可不容忽视,在编写一个程序模块时说明这个模块的功能、作用、创建时间、作者等,这对以后的维护大有好处。
一般在用户的脚本中插入头信息是一个不错的想法,如下事例:‘Script name: Connect internet‘Author: zynet‘Last Modified: 6/23/08‘Description: Connect my webserver.1.单行注释:通过输入一个单引号( ‘ )或REM ( Remark的缩写 )来添加。
2.多行注释:%Rem …%End Rem 所以以上例子也可以写成这样:%REMScript name: Connect internetAuthor: zynetLast Modified: 6/23/08Description: Connect my webserver.%END REM变量和数据类型1.声明变量Dim Variablename as typedim是dimension的缩写,为变量的值在内存中创建一个空间。
Variablename 是变量的名称,一个变量的名称一定要以字母开头,其后可以是字母、任何数字以及下划线,变量的名称不区分大小写,最多可容纳40个字符。
Lotus中有一些保留字,大部分是指令和语句,它们不能被用做变量名。
type是数据类型,可以是Boolean、Byte、Integer、Long、Single、Double、Currency、String、Variant 当然以后在介绍面象对象的时候还涉及到类和对象的定义,也是这个声明格式,这些在以后再介绍。
类型值 SizeVariant类型是这几种数据类型中最特殊的,他是一个变体类型,当定义的一个Variant型的变量时,可以给他赋以上任何一种类型的数据。
但是他也是占用内存最多的一个数据类型。
Currency类型则是最不常用到的,我以前都不知道有这样一个类型,如果有高手看到这里有不同的看法,可以发邮件给我,大家交流一下,可能有其他的特殊用途。
2.列表用户可以通过给Dim语句添加List运算符来声明一个列表。
声明:Dim Variablename List as TypeDim :定义变量Variablename 列表的名称List 定义为列表Type 列表的类型例子:Dim PriceList List as CurrencyDim ItemName as StringPriceList(“apple”)=1.05ItemName=”Oranges”PriceList(itemname)=1.85Messagebox PriceList(itemname)输出结果为:弹出对话框 1.853.数组数组是一组顺序下具有一系列的值,有一维数组,二维数组,LotusScript最多可以有8维。
声明一维数组:Dim valArray(5) as Integer 或 Dim ValArray(0 to 5) as integer这个数组的下标是从0开始到5,也就是数组ValArray有6个元素。
声明二维数组:dim TwoArray(1 to 5, 1 to 4) as Integer这个数组的第一个元素是TwoArray(1,1) ,是一个二维数组使用Option Base来改变数组的底数当使用数组时,如果你的大脑能够很自然地想清楚它是从0开始而不是从1开始的,那么无论何时你要给arrayname(0)赋值都将不是问题。
但是如果对这一点存在疑问,你可以通过改变LotusScript的功能来采取一些措施。
如果你进入到Options例程中,便可以添加”Option Base n”的命令行,n是默认的数组底限。
添加Option Base 1,将使默认的数组底限设置为1,则arrayname(1)会成为数组的第一个成员。
然而,当你使用多维数组的时候,需要小心使用Option Base. Option Base将把一个三维数组的中心从(0,0,0)移动到(1,1,1),这是一个有趣的数学问题。
声明变长数组:Redim valarray(5) as string变长数组是指原来的数组个数不够用时,需要重新定义数组的长度,有两种情况:一.先定义了一个数组,但是没有声明个数(dim valarray() as string),在以后用到的时候才用Redim 来重新声明。
如下例所示,输出zys字符串:Dim valarray() as stringRedim valarray(4) as stringvalarray(0)=”zys”messagebox valarray(0)二.先声明了一个数组,并且给这个数组中的元素赋了值,然后想要重新定义数组的个数,可用Redim来重新声明,如果用户已经给数组赋了值,并且想保留它们,可以用PRESERVE关键字来进行保存,以防重新改变它们大小时,值被擦除掉。
如下例所示:例1:Redim valarray(1) as integerValarray(0)=1Redim valarray(2) as integerMessagebox valarray(0)输出结果为:0例2:dim valarray() as integerRedim valarray(2) as integerValarray(0)=1Messagebox valarray(0)输出结果为:0例3:以下是重新定义了数组后保留了原值的例子:Redim valarray(1) as integerValarray(0)=1Redim preserve valarray(2) as integerMessagebox valarray(0)输出结果为:1例1和例2的区别就在于第一次定义后能不能附值,在例1中第一次定义用的是redim, redim定义数组时必须定义该数组的上界,且定义以后可以直接赋值使用; 而例2中第一次定义用的是dim, dim定义数组时如果定义了上界,则可以直接赋值使用,并且不能再用redim重新定义,如果没有定义上界,则不能直接使用,并且必须用redim重新定义后才能赋值使用。
两关于数组的特殊的函数Lbound(valarray) 输出数组的下界Ubound(valarray) 输出数组的上界选择和循环语句1.if语句If condition thenstatementsElseif condition thenstatements……ElsestatementsEnd if2.Select语句Select Case selectexprCase conditionListStatementsCase conditionListStatements…Case ElseStatementsEnd Select3.语句for conntvar=first to Last [Step increment] statementsnext [countvar]4.while语句While conditionStatementsWend5.Do While/until Loop语句永远循环DoStatementsLoop先检查条件,再循环Do while conditionStatementsLoopDo until conditionStatementsLoop先循环,后检查条件DoStatementsLoop while conditionDoStatementsLoop until condition6. ForallForAll refVar in containerstatementsEnd ForAll例子:Sub Click(Source As Button)Dim short(5) As IntegerForall x In shortx=1End ForallEnd Sub结果:给short数组的每个元素赋值中途退出循环Exit LoopType说明:looptype: for, while, do子事例、函数、声明、作用域1. 子事例子事例也就是子过程,在编程窗格中单击一个按钮的click子事例就会打开如下click子事例:Sub Click(Source As Button)messagebox “hello word!”End Sub你可以在这个子事例中写出代码,如messagebox “hello word!” ,这是系统默认建立的一个单击子事例,同样的你可以建立自己的子事例如下:Sub Click(Source As Button)messagebox “hello word!”dim name=”lotus script”OutputName(name) ‘调用子事例OutputNameEnd SubSub OutputName(name as string) ‘建立的新子事例,功能是输出参数name的值Messagebox nameSub输出结果为:弹出窗口lotus script子事例是没有返回值的,函数的使用和子事例差不多,但是函数有返回值。
如果想在子事例中返回一个值的话可以定义一个全局变量,然后给这个变量赋值就能达返回值的功能,如何定义一个全局变量将在作用域中讲到。
2. 函数程序员都知道函数的作用,我就不多说了,这里只说明一下定义和使用的格式Sub Click(Source As Button)Dim a As IntegerDim b As IntegerDim c As Integera=3b=4c=Sun(a,b) '使用求和函数得到a和b 的和Messagebox Cstr(a)+"+"+Cstr(b)+"="+Cstr(c)End SubFunction Sun(a As Integer ,b As Integer ) As Integer '定义函数Sun, 功能是返回两个参数的和c=a+bsun=c '给函数名赋值就是这个函数的返回值。
End Function输出结果:弹出对话框a+b3. 控制变量是否在需要声明才有效如果用户在脚本的options部分中设置了option declare, 那么就一定要声明所有的变量,不管它们是什么类型。
默认是可以不声明的,如下例:例1 (没有设置 option declare)Sub Click(Source As Button)TestVar=”hello word !”Messagebox TestVarEnd Sub输出结果为:(弹出对话框)hello word!例2 (设置了 option declare)Option DeclareSub Click(Source As Button)TestVar=”hello word !”Messagebox TestVarEnd Sub在保存的时候就会出现错误:Variable not declared:TestVar4. 作用域LotusScript的作用域分为三个,从小到大分别为:子事例或函数、对象(如按钮、域等)、窗体(如表单、视图等)(1)子事例或函数如果在子事例或函数中定义的变量只能在此子事例或函数中使用,在另外一个是不能用的,如下:Sub Click(Source As Button)Dim TestVar As StringTestvar="hello word!"End SubSub outputStrMessagebox testvarEnd Sub输出结果:弹出对话框为无值因为TestVar是在Click子事例中定义的,所以只能在Click子事例中使用,在OutputStr子事例中是不起作用的。