当前位置:首页 > 技能相关 > PowerBuilder > 正文内容

PowerScript变量、常量、数组和外部函数

admin3年前 (2022-01-23)PowerBuilder5660 修订时间:2022-01-24 18:35:00

一、变量和常量

    常量是程序中其数值不发生变化的量,在说明中包括 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)Date1900-01-01 
Char~0Datatime 1900-01-01 00:00:00 
Boolean FALSE数值类型0
string""Time00: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 





 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。

扫描二维码推送至手机访问。

版权声明:本文由LIFEI - blog发布,如需转载请注明出处。

本文链接:http://www.lifeiai.com/?id=36

分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。