PowerScript变量、常量、数组和外部函数
一、变量和常量
常量是程序中其数值不发生变化的量,在说明中包括 CONSTANT关键字,并且赋予其一常值,在说明后不能再更改。变量在说明时不带ONSTANT 关键字,在脚本运行期间可以更改其保存的数值。
变量和常量有三条属性,它们是如下所述。
(1) 在应用中可以使用该变量和常量的范围——作用范围,它有四个层次,依次是:
• Global(全局)整个应用中都起作用,独立于其他任何对象
• Instance (实例)附属于某对象实例(可以看做对象的属性),可以在定义时用存取关键字规定其作用范围
• Shared (共享)属于类,在该类的所有对象实例中都存在;当对象关闭后再次打开时,Shared 型变量保持关闭时的值;Shared 型变量仅在对象内部有效
• Local (局部)存在于脚本中的临时变量,当脚本运行结束后将被删除
(2) 数据类型是指常量和变量所持有数据的类型,可以使用任意标准类型、对象、控件和定义过的对象、结构体。
(3) 初始值——说明赋予的初始化值,若没有指定,自动把该变量类型的默认初值(不是空值)赋给它。
二、变量和常量说明的一般语法格式为:
1、[存取权] 数据类型 标识名[=初值][,标识名[=初值]] [, ...] , 其中方括弧括起的内容为可选项。
2、blob 型数据说明的语法格式为: [存取权] blob [{大小}] 标识名,说明 blob 型变量时,在 blob 后可以用花括号括起一整数,该整数以字节为单位表示 blob 的大小。如果省略该项,则 PowerBuilder 默认大小为 0, 并在使用该变量时自动调整其大小。如果使用时超过了定义的大小,超出部分将被截去。此外,blob 没有初值。例如:blob ib_picture // 实例变量,长度为 0(默认值);blob{100} lb_object // 局部变量,长度为 100 ;
3、说明十进制数时,可以指定精度,语法格式为:[存取权] decimal|dec[{精度}] 标识名[=初值] ,精度是一个整数,代表小数点后的位数,如果不指定,则以赋值时给定精度为准。例如:decimal{2} sc_sum,sc_sum2 // 共享变量,精度为 0.00 ;decimal sc_tax // 共享变量,精度未知;sc_tax = sc_sum * sc_sum2 // sc_tax 的精度为 0.0000
4、说明常量时需要加关键字 CONSTANT,必须赋初值,并且不能再改变。语法为:CONSTANT [存取权] 数据类型 标识名 = 常值,或者:[存取权] CONSTANT 数据类型 标识名 = 常值
三、表 3.1 默认值自动初值
类型 | 默认初值 | 类型 | 默认初值 |
Blob | 空的 blob(大小为 0) | Date | 1900-01-01 |
Char | ~0 | Datatime | 1900-01-01 00:00:00 |
Boolean | FALSE | 数值类型 | 0 |
string | "" | Time | 00:00:00 |
备注:变量初始化是在编译时,而不是在运行时完成的。因此,不要使初值随当时状态改变,例如:date id_date = Today( ) ,id_date 保存的是编译时的日期而不是运行时的,在这种情况下,该语句应该为:date id_date;id_date = Today( ) ;
四、变量和常量的作用范围
不同作用范围的变量和常量需要在不同层次上说明,Global 型可以在相关画板中定义,Instance 和 Shared 型也可以用同样方法在它们各自的画板中定义,Local 型变量直接写在脚本中即可。Shared 型变量是一个静态的变量,这不仅意味着它所在的对象关闭后再次打开时,它仍保持着对象关闭时的值,还意味着同一个类的多个实例中同名 Shared 型变量保持相同的结果。
如果不需要 Shared 型的静态特性,则 Instance 类型是最佳选择,事实上 Instance 类型是对象中最常用的数据类型,不过要记住,Instance 型变量与 Shared 型变量的不同之处在于:Instance 变量在实例打开时
被创建并初始化,在实例关闭时被删除,而且同一对象的多个实例中的 Instance 变量被分别初始化并各自独立。
Instance 型变量和常量的存取权设定可以严格规定变量和常量的使用权限,是封装数据的一种方法。它的详细使用语法如下:
[使用权力] [读权力] [写权力] 数据类型 ...
1、使用权力可以设为以下方式:
• PUBLIC(默认)任何在应用中的对象都有权使用,非对象成员可使用点操作符标明域
• PROTECTED 定义变量的对象及其后代有权使用
• PRIVATE 除定义变量的对象之外,任何对象无权使用读权力关键字加强限制脚本读取数据的能力,可使用如下关键字:
• PROTECTEDREAD 定义变量的对象及其后代有权读取
• PRIVATEREAD 除定义变量的对象之外,任何对象无权读取如果该关键字被忽略,任何脚本可读取该变量的值。
2、写权力关键字加强限制脚本修改数据的能力,可使用如下关键字:
• PROTECTEDWRITE 只有定义变量的对象及其后代有权修改
• PRIVATEWRITE 除定义变量的对象之外,任何对象无权修改
如果该关键字被忽略,任何脚本都可写入该变量的值。
以上关键字不能一同使用,当使用权力规定为 PUBLIC 时,可以使用任一读/写权力关键字,当使用权定为PROTECTED 时,读/写权力仅能定义为 PRIVATEREAD/PRIVATEWRITE,当使用权定义为 PRIVATE 时,不能指定读/写权力,因为 PRIVATE 已经是最严格的。
PowerBuilder 还提供了一种成组规定数据存储权力的方法。
使用权:
[读权力] [写权力] 数据类型 ...
[使用权] [读权力] [写权力] 数据类型 ...
五、数组
数组是指有一定顺序关系的若干变量的集合体。组成数组的变量称为该数组的元素变量,简称元素。PowerBuilder 支持一维数组和多维数组,一维数组的元素个数固定不变,也可在运行时变化,但多维数组不支持变化元素个数。数组的每一维最多可包含 2 147 483 647 个元素。
1、定义数组格式如下:
数据类型 数组名[[d1,...dn]][={初值}]
其中在数组名后有两个方括号,外面的一对是定义数组下标要求的符号,里面的一对表示其中的内容是可选的。
数组元素用数组名后带有方括号的下标表示,下标是一对中间间隔 TO 的整数,它们定义数组元素下标的范围,例如:
longll_Data[3 to 10] // 下标 3-10
longll_Profit[-10 to 10] // 下标-10-+10
在 TO 前的一个整数代表下标的下界,如果省略(连同 TO),则下界取默认值 1,后一个整数代表下标的上界,上界必须大于下界。如果上下界都省略,则代表变化元素个数数组,具体个数在运行时决定(不过这类数组下标从 1 开始)
2、多维数组的下标之间用逗号分隔
例如:
reallr_Array[10,10] // 二维数组 10×10
charlc_3dArray[3,3,3]// 三维数组 3×3×3
3、备注
(1)在定义数组时可以指定部分或全部数组元素初值,没有赋初值的元素自动初始化为零,例如:integer li_Arr[4]={1,2,3} ;li_Arr[4] = 0;
(2)在定义时不指定下标范围表示数组元素个数可变,换句话说,该数组为动态数组,例如:integer li_a[]
(3)一维数组之间可以相互赋值,例如:integer li_a[],li_b[3],li_c[5] ;li_a = {1,2,3,4} ;i_b = li_a ;li_c = li_b ;
(4)说明多维数组时可以指定部分或全部数组元素初值,没有赋初值的元素自动初始为零,例如:integer li_Arr[3,3]={ 11,21,31, 12,22,32 } ;li_Arr[1,3]=0 li_Arr[2,3]=0l i_Arr[3,3]=0 ;
六、引用变量
PowerBuilder 按照如下顺序查找引用的变量:
(1)Local;(2)Shared;(3)Global;(4)Instance
一旦遇到变量名相符的变量,PowerBuilder 将使用它。如果存在相同名称的 Local,Shared 和 Global 型变量,在脚本引用该变量时,Local 或 Shared 型会被先引用,Global 型会被覆盖,若要引用全局变量,在变量名前加全局操作符::即可,例如:IF total < ::total THEN ...
Instance 型变量在其实例内部脚本可以直接引用它,如果在其他对象中,在存取权为允许的条件下,使
用点操作符引用该变量,例如:
Object.InstanceVariable
为编写可重用的脚本,不妨利用代名词Parent,例如在一个窗口的控件中引用窗口的变量:
Parent.ParentWindowVariable