PowerScript语法参考手册之语言基础
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PowerScript语法参考手册之语言基础相关的知识,希望对你有一定的参考价值。
PowerScript语法参考手册
前言:本文用于PowerBuilder12.6程序员,PowerBuilder最初由Sybase发布,能很快捷开发C/S程序或者多层应用系统。SAP以58亿美元现金收购Sybase以抗衡甲骨文,PowerBuilder 12.6是SAP收购Sybase后与2014发布的版本。
这是第一部分:语言基础。
语言基础
注释
和C++/Java类似,支持两种注释方式:
双斜杠:
代码 // 注释
斜杠+星号对:
/* 注释 */
示例
(1)双斜杠
// This entire line is a comment.
// This entire line is another comment.
amt = qty * cost // Rest of the line is comment.
// The following statement was commented out so that it
// would not execute.
// SetNull(amt)
(2)单斜杠+星号
/* This is a single-line comment. */
/* This comment starts here,
continues to this line,
and finally ends here. */
A = B + C /* This comment starts here.
/* This is the start of a nested comment.
The nested comment ends here. */
The first comment ends here. */ + D + E + F
标识符
标识符规则如下:
- 必须以字母或者下划线开头
- 不能使用保留单词或者关键词
- 最高40个字符,而且不能有空格
- 大小写不敏感
- 可包含字母、数字、破折号、下划线、$、#、%的任意组合
示例
(1)有效标识符
ABC_Code
Child-Id
FirstButton
response35
pay-before%deductions$
ORDER_DATE
Actual-$-amount
Part#
(2)无效标识符
2nd-quantity // Does not start with a letter
ABC Code // Contains a space
ChildsId // Contains invalid special character
标签
标签是GOTO语句指向标志。一个有效的标识符就是有效的标签,但是需要加上冒号。
示例
(1)自成一行
FindCity:
IF city=cityname[1] THEN ...
(2)和后续语句一行
FindCity: IF city=cityname[1] THEN ...
特殊字符
在字符串中能加入特殊字符。例如,可以加入一个TAB到字符串中,这样可以保证恰当的留白。
语法
分类 | 名称 | 替代字符串 | 备注 |
普通ASCII 字符 | Newline | ~n | |
Tab | ~t | ||
Vertical tab | ~v | ||
Carriage return | ~r | ||
Form feed | ~f | ||
Backspace | ~b | ||
Double quote | ~" | ||
Single quote | ~ | ||
Tilde | ~~ | ||
任意ASCII 字符 | Decimal | ~### | ### = a 3-digit number from 000 to 255 |
Hexadecimal | ~h## | ## = a 2-digit hexadecimal number from 01 to FF | |
Octal | ~o### | ### = a 3-digit octal number from 000 to 377 |
示例
(1)ASCII字符
字符串 | 描述 |
"dog~n" | dog和新的空白行 |
"dog~tcat~ttiger" | 单词dog, tab字符, 单词cat, 第二个tab字符,单词tiger |
(2)十进制、十六进制、八进制数字
字符串 | 描述 |
"~249" | 表示249十进制数字的ASCII字符串 |
"~hF9" | 表示 F9十六进制数字的ASCII字符串 |
"~o371" | 表示371八进制数字的ASCII字符串 |
NULL
Null 意思是未定义或者未知,和空白字符串、0、日期0000-00-00不同。null既不是0也不是非0。null经常用于数据库记录值。
(1)变量初始值
尽管PowerBuilder可以让所有变量都能赋值 null ,然而并没有把变量自动初始化为null. 当变量在声明时没有初始化时,变量会自动初始化为默认值,例如numeric 默认值为0,boolean默认值为false,string的默认值为空串 ("") 。
(2)变量中的Null
如下情况会让一个变量成为null:
- 从数据库读入null值到变量中。如果数据库支持null, 当SQL语句 INSERT 或者UPDATE 插入或者修改某字段值为null ,那么使用SELECT 或者FETCH 语句读取null到变量中。
- 使用SetNull 函数来显式设置变量为null. (3)函数和表达式中的Null
函数:任何参数值为null,则返回null。
表达式:任何变量值为null,则结果为null。但是,结果为null的布尔表达式实际上是未定义,因此实际值为false。
(4)null的测试
使用 IsNull 函数来测试是否为null,而不能使用=来测试。
示例
(1)实例1
下列语句均没有发出beep声 (变量nbr被赋值为null, 因此每个if语句判断均为 false):
int Nbr
// Set Nbr to NULL.
SetNull(Nbr)
IF Nbr = 1 THEN Beep(1)
IF Nbr <> 1 THEN Beep(1)
IF NOT (Nbr = 1) THEN Beep(1)
(2)实例2
布尔表达式值为false, 因此 ELSE语句被执行。
int a
SetNull(a)
IF a = 1 THEN
MessageBox("Value", "a = 1")
ELSE
MessageBox("Value", "a = NULL")
END IF
(3)实例3
当焦点不在任何控件上,GetFocus 返回 null 对象的引用,布尔表达式值为false,于是 ELSE 表达式被执行:
IF GetFocus( ) THEN
. . . // Some processing
ELSE
MessageBox("Important", "Specify an option!")
END IF
保留字
保留字是PowerBuilder内部使用的词,而不能被用作标识符。 如果强行使用,则编译器会告警。但是,如果在保留字前面加星号,那么保留字能被用于函数名称。
下表展示了所有的保留字:
PowerBuilder系统类内部的private属性也不能用作标识符,强制使用的话也会得到一个编译器告警。如果部署一个DataWindow到Web应用中,不能使用javascript保留字来命名字段或者绑定对象。
代词
PowerScript使用代词(pronoun)来引用对象或者控件。即使对象或者控件变更,引用也不会错误。
若要使用对象名称,则在函数或者事件中可使用代词来引用对象,例如:
- 在对象或者控件中触发事件
- 操控或者变更对象或者控件
- 获取或者变更属性的设置下表列出了PowerScript 代词:
代词 | 用途 | 指向 |
This | 窗口(Window), 自定义用户对象,菜单(menu) , 应用程序对象(application object), 控件(control) | 对象或者控件自身 |
Parent | 窗口的控件 | 包含控件的窗口 |
自定义用户对象中的控件 | 包含控件的自定义用户对象 | |
菜单 | 上级菜单项 | |
Super | 派生对象或者控件 | 父对象 |
派生窗口或者用户对象 | 窗口或者用户对象的直接祖先 | |
派生窗口或者用户对象中的控件 | 父窗口或者用户对象的控件的直接祖先 |
ParentWindow 属性
可使用菜单Menu对象的ParentWindow 属性,就象Menu脚本的代词一样。当程序运行时,ParentWindow 属性标识和菜单关联的窗口。
Parent 示例
(1)Window控件
如果在窗口的CommandButton 中Clicked事件脚本中使用下面这句,那么点击按钮就会关闭含有这个按钮的窗口。
Close(Parent)
如果在CommandButton脚本中使用下面这句,那么点击这个按钮就会显示窗口的水平滚动条,窗口的HScrollBar 属性为true。
Parent.HScrollBar = TRUE
(2)用户对象控件
如果在用户对象CheckBox 控件的Clicked 事件脚本中包含下面这句,那么点击检查框会隐藏这个用户对象。
Parent.Hide( )
如果在CheckBox脚本中使用下面这句,那么点击检查框会禁用用户对象,用户对象的Enabled 属性为false。
Parent.Enabled = FALSE
(3)菜单
如果在菜单项Clicked 脚本中使用下面这句,该菜单项是Select下面的Select All菜单项,那么点击Select All就会禁用Select菜单项。
Parent.Disable( )
如果在Select All菜单项的Clicked 事件脚本中使用下面这句,那么点击Select All 菜单项就会使能上级菜单Select。
Parent.Checked = TRUE
This 示例
实例1
在一个菜单脚本中使用下面这句,那么就会放置一个检查标志。
This.Check( )
实例2
在下面的函数调用中,This将传递一个包含自身脚本的对象引用。
ReCalc(This)
实例3
下面这句,x指向一个本地变量,而不是控件的X属性,因为没有使用This。但是如果没有本地变量,那么x就会指向对象的X属性。
x = x + 50
实例4
使用This能保证显式引用属性。下面这句用于CommandButton的Clicked 事件脚本,则点击按钮将会改变按钮的水平位置,即改变按钮的X属性。
This.x = This.x + 50
Super 示例
实例1
下面这句调用祖先函数wf_myfunc,有可能派生类也有同名函数。这个例子必须存在于派生窗口的函数或者脚本,而不能用于窗口的控件。如果用于派生窗口中按钮的Clicked 事件,那么编译器将会提示一个语法错误:“Supplying arguments”,“Be certain to supply the correct number of arguments for the ancestor function”。
Super::wf_myfunc(myarg1, myarg2)
实例2
下面这句用于CommandButton 脚本,调用窗口或者用户对象的直接祖先中CommandButton控件 的Clicked 事件。
Super::EVENT Clicked()
语句接续(行接续)
一般每行只放置一条语句,但是有时候会需要把一条语句放在多行中。语句的接续字符是&符号。(在加速键中&符号的使用方法参见其他资料)
语法
Start of statement &
more statement &
end of statement
&符号必须放在最后,作为行末非空字符,否则编译器会认为它是语句的一个部分。
用法提示
不能把&符号用于:
- 注释行的接续,参见注释的用法
- SQL语句的接续,PowerBuilder的SQL语句必然以分号结束
示例
(1)字符串的接续
下面这种方法就是把&符号放置在字符串的中间,然后分拆字符串为两行。注意,&符号之前的任何空白,例如tab键或者space键,都是字符串的一个部分;下一行的行首的任何空白也是字符串的一个部分。
IF Employee_District = "Eastern United States and&
Eastern Canada" THEN ...
下面这句在IF...THEN语句中使用&符号拆分字符串,为了可读性,tab键加在第二行行首,但是这可能导致编译器报错或者不是程序员所期望的字符串(加入tab就不是本意)。
PowerScript语法参考手册结构和对象分册