中国人自己的开发语言HB++<语句介绍>
这些是基本的开发语言语句,HB++对面向对象作了不少支持工作,在这方面,比VB.NET最新版的面向对象支持方面更加出色.这里将分段介绍HB++,供同行业朋友指正和帮助
3.2 语句
1. 顺序语句
a) 赋值语句
- Let基本类型赋值语句
[Let] 变量名 类成员变量名 = 表达式
Set非基本类型赋值语句
Set 变量名 类成员变量名 = 表达式
Set 变量名 类成员变量名 = New 非基本类型名[(构造时的参数表)]
b) 调用函数
- Call调用函数语句
[Call] 函数名 类成员函数名(参数表)
即使函数有返回值,使用Call语句后,返回值将自动丢失。如果返回的是类实例,HB++将自动释放类实例空间。
2. 条件语句
a)If语句
If语句标准格式:
If 逻辑表达式 Then
[Else If 逻辑表达式 Then]
[Else]
End If
b)Select语句
Select语句标准格式:
Select 算术表达式
Case 逻辑表达式
[Case Else]
End Select
注意:此处的逻辑表达式的第一个逻辑运算符不需要左边的算式。例如:
Dim a As Long
a=10
Select a+3
Case <2
Case >2 And a+3<10
Case >10 And a+3<100
CaseElse
End Select
3. 循环语句
a)For循环语句
- 标准格式:
For 循环变量 = 初始值 To 终止值 [Step 步长值]
Next 循环变量
循环变量只能是单独的变量,不能是类的成员属性或函数。步长值缺省值等于1。
Next语句的循环变量一定要与For语句中的循环变量相同。
Exit For语句将跳出循环
b)ForSet集合专用循环语句
- ForSet 集合变量
NextSet
集合变量只能是集合类的实例变量。其初始值是集合的第一个元素。此循环将自动从第一个元素循环道集合的最后一个元素。循环体中直接使用集合变量操作元素内容。
Exit For语句将跳出循环
c)Do While...Loop当条件为真循环语句
- Do While 逻辑表达式
Loop
条件先于循环,当外部进入循环时,条件不成立,循环将跳过。
Exit Do语句将跳出循环
d)Do Until...Loop当条件为真跳出循环语句
- Do Until 逻辑表达式
Loop
条件先于循环,当外部进入循环时,条件成立,循环将跳过。
Exit Do语句将跳出循环
e)Do...Loop While后判断当条件为真循环语句
- Do
Loop While 逻辑表达式
条件后于循环,当外部进入循环时,至少循环一遍,然后判断条件是否成立,如果成立,循环将跳出。
Exit Do语句将跳出循环
f)Do...Loop Until后判断当条件为真跳出循环语句
Do
Loop Until 逻辑表达式
条件后于循环,当外部进入循环时,至少循环一遍,然后判断条件是否成立,如果不成立,循环将跳出。
Exit Do语句将跳出循环
4. 定义语句
a)Function函数定义语句
标准格式:
[Virtual] [Public Private]Function 函数名([[ByVal ByRef] 参数名 As 类型名][,[ByVal ByRef] [Optional] 参数名 As 类型名[= 常量表达式]]...) As 类型名
End Function
函数名:必选,必须是有效字母:26个大小写英文字母、10个数字、下划线、所有中文,第一个字母必须是英文字母或中文、下划线;
参数名:同变量名;
类型名:基本数据类型、非基本数据类型(对象类)、类模板类型;
[Virtual]:虚拟函数定义,仅仅只能在类的成员函数中定义;
[Public Private]:可选,公有私有说明;
[ByVal ByRef]:可选,参数按值或按地址传。缺省是按地址传ByRef;
[Optional]:可选,表示此参数可以写可以不写,即可选参数。可选参数可以对其给一个缺省值,方法是在其定义后跟一个等号和常量算式。
[= 常量表达式]:可选,当前面定义的参数是可选参数时,才能使用缺省值定义。常量表达式中不能使用变量。
End Funciton:结束函数定义
b)Class类自定义语句
标准格式:
Class 自定义的类型名 [From 已有的对象类型名]
End Class
自定义的类型名同变量名的字母组成,自定义类型名不能与已有类型名相同。此类型将是对象类。
[From 已有的对象类型名]:From继承语句,说明自定义类型是需要从已有的对象类型继承过来的。
类型定义必须放在模块定义的内部
c)Module模块定义语句
标准格式:
Module 模块名
End Module
模块内部将可以定义以下内容:
自定义对象类型、全局变量、全局函数、模块内局部变量、模块内局部函数。
模块内部不能定义窗口类,窗口类是独立与所有定义形式。
模块定义的内容必须在同一个文件中。
模块定义的内容缺省是全局的。
d)Form窗口类定义语句
标准格式:
Form 窗口类 End Form
HB++中,Form语句定义的窗口类将在编译后执行前自动创建一个窗口实例,并创建一个全局的静态变量:窗口类。
在Form...End Form中定义的所有内容,都将是此窗口的成员属性或方法或事件。
窗口中插入控件的方法很简单,如下面例子:(由于还没有开发完可视化编程部分,所以暂可以使用以下方式)
Form 窗口类
Public withEvent button as TButton
public withEvent treeView as TTReeview
public withEvent edit as TText
public withEvent coolBar as TCoolBar
End Form
上面例子中,窗口中将自动被插入了一个按钮、显示树、编辑框、工具条。当没有定位,如果想定位,继续写下窗口类的构造函数,在构造函数中将各控件定位。定位方法可以是赋值给Left、Top、Width、Height或指定Align方式定位。
窗口只有当程序结束时才会被自动释放,如果希望强制释放删除,将上例的窗口类置空即可:
Set 窗口类 = NULL
其他对象类的强制释放删除同样如此。
e)TypeDef类型别名定义语句
标准格式:
TypeDef 已有类型名类型的别名
已有类型名可以是任何HB++的类型(包括类模板)。
类型别名的使用方法与类型名相同,虽然它不是一个新的类型,但与它指向的类型完全相同。
f)Struct结构类型定义语句
标准格式:
Struct 结构名 From 已有的类型名
End Struct
在HB++中,Struct和Class的定义几乎完全一样,使用时可以当成一种方式使用。
g)Dim变量定义语句
标准格式:
Dim 变量名[(数组大小)] As [New] 类型名 [<类型参数表>][,变量名 As [New] 类型名 [<类型参数表>]...]
变量名:动态变量名称;
[(数组大小)]:可选,定义数组;
类型名:HB++所有类型名;
[<类型参数表>]:可选,如果类型是类模板,此处的类型参数表将是此类模板所需的类参数。参数最多可以是十个。
h)Static静态变量定义语句
标准格式:
Static 变量名[(数组大小)] As [New] 类型名 [<类型参数表>][,变量名 As [New]类型名 [<类型参数表>]...]
变量名:静态变量名称
其他同Dim定义语句说明。
i)Public公有变量定义语句
标准格式:
Public [Static] 变量名[(数组大小)] As [New] 类型名 [<类型参数表>][,变量名 As [New] 类型名 [<类型参数表>]...]
变量名:公有变量名称
使用Static说明变量是公有的静态变量,不使用的缺省是动态标量。
其他同Dim定义语句说明。
j)Private私有变量定义语句
标准格式:
Private [Static] 变量名[(数组大小)] As [New] 类型名 [<类型参数表>][,变量名 As [New] 类型名 [<类型参数表>]...]
变量名:私有变量名称
使用Static说明变量是私有有的静态变量,不使用的缺省是动态标量。
其他同Dim定义语句说明。
注意:在变量定义中,如果是对象类型的变量,可以使用New来直接创建类实例,但New不能在类属性定义中使用。
如果变量定义中没有使用New,可以在执行程序体中使用New语句来创建对象类。例如:
Dim a as TForm
Set a = New TForm
5. 事件定义语句
a)Event事件定义语句
标准格式:
Event 事件函数名([[ByVal ByRef] 参数名 As 类型名][,[ByVal ByRef] [Optional] 参数名 As 类型名[= 常量表达式]]...)
Event事件定义语句定义了事件函数的函数名和参数形式。
Event语句必须在类定义中使用。
当定义类实例的此事件函数时,事件函数名定义格式如下:
类实例变量名_事件函数名
例如:
Module 例子模块
Class 例子类
Pulic Event Over(ByVal X as Long,ByVal Y as Long)
Public OldX as Long,OldY as Long
Function Line(ByVal X as Long,ByVal Y as Long)
RaiseEvent Over(X,Y)
窗口类.Line(OldX,OldY,X,Y)
End Function
'预先定义事件过程函数的方法:
'有了预先定义的事件函数,此类的类实例在创建构造后,自动拥有此事件函数的处理过程。
Function _Over(ByVal X as Long,ByVal Y as Long)
if X>0 And X <100 And Y>0 And Y<150 Then
Msgbox ("进入此区域有效!")
end if
End Function
End Class
End Module
Form 窗口类 From TForm
Public withEvent b as TButton
Punlic c as 例子类
Public withEvent d as 例子类
function b_Click()
end Function
Function c_Over(ByVal X as Long,ByVal Y as Long)
if X>100 And X <200 And Y>150 And Y<300 Then
Msgbox ("不能进入此区域!")
end if
End Function
End Form
b)RaiseEvent激发事件语句
标准格式:
RaiseEvent 事件函数名(参数表)
如Event中讲述的例子。
c)WithEvent定义带事件的对象类实例变量
WithEvent语句在定义变量中说明使用,它表示定义的变量将在构造时自动获取类实例,如果是控件类实例,还将插入到窗口类中。
WithEvent说明的变量必须定义是对象类型,如果是基本数据类型,HB++将报错。
如Event中讲述的例子。
6. 错误处理语句
a)OnError开启错误处理语句
标准格式:
OnError
OnError表示从此行开始如果有错误,将自动转到DoError处执行。
b)DoError错误处理语句
标准格式:
DoError [函数名(参数表)]
DoError如果后面没有跟函数,当在OnError到DoError之间的代码中出错时,将自动执行DoError语句后面到CloseError之间的程序代码。
如果后面使用了函数,当出错,将自动调用此函数。
c)CloseError关闭错误处理语句
标准格式:
CloseError
关闭错误处理。关闭后,执行出错,HB++不会激发DoError处理错误,将系统报错。
d)Resume恢复执行语句
标准格式:
Resume [Next Exit]
Resume:错误处理完毕后,使用此语句将返回到出错的语句上继续执行
Resume Next:错误处理完毕后,使用此语句将返回到出错的下一条语句
Resume Exit:错误处理完毕后,使用此语句将退出当前函数。
注意:HB++的错误处理机制允许嵌套使用。当出错时,HB++会自动寻找最近的错误处理的DoError。例如下例:
Function abc(a as long,b as long)
dim c as long
OnError
a=10
b=0
c=a/b
OnError
a=5
c=a/b
DoError
Msgbox(a)
Resume Next
CloseError
a=20
c=a/b
DoError
MsgBox(a)
Resume Next
ClsoeError
end function
运行结果:第一次提示“10”,第二次提示“5”,第三次提示“20”。
7. 属性函数定义
a)Property Get读操作函数定义语句
标准格式:
Property Get 属性函数名() As 类型名[<>]
End Property
b)Property Let基本数据类型写操作函数定义语句
标准格式:
Property Let 属性函数名([ByVal ByRef] 参数名 As 基本数据类型名[<>])
End Property
c)Property Set对象类型写操作函数定义语句
标准格式:
Property Set 属性函数名([ByVal ByRef] 参数名 As 对象类型名[<>])
End Property
注意:Property Get与Property Let配对或Property Get与Property Set配对,当配对两个同名属性函数名的类型一定要相同
d)只读属性或只写属性
只读属性:仅仅使用Property Get定义属性读函数。
只写属性:仅仅使用Property Let或Property Set定义属性写函数。
例子:
Module 例子模块
Class 例子类
Private FData as Long
Property Get Data() as Long
Data=FData
End Property
Property Let Data(ByVal Value as Long)
FData=Value
End Property
End Class
Function Dispaly()
dim d as New 例子类
d.Data=10
Msgbox(d.Data)
end Function
End Module