3、Function过程
VB包含内置的或内部的函数,还可用Function语句编写自己的Function过程。在定义了一个函数之后,可以像调用任何一个VB的内部函数一样使用它,即可以在任何表达式,语句或函数中引用它。
函数过程是标准模块中位中Function语句与End Function 语句之间的一系列语句。函数中的这些语句完成某些有意义的工作,一般是处理文本,进行输入或计算一个值。
通过将函数名与任何所需的参数一起置于一条程序语句中,可以调用该函数。换句话说,使用函数过程与使用内置函数(比如Time,Int或Str等)的方法完全相同。
每个函数完成一种服务,比如进行计算并返回一个值。
在标准模块中声明的函数在缺省的状态下是公用函数,它们可在任何事件中过程中使用。
(1)Function(函数)过程的定义
Function过程的定义格式:
[Public|Private|Friend|Static]Function 过程名[(参数列表)][As数据类型]
[程序段]
[过程名=表达式]
[Exit Function]
[程序段]
[过程名=表达式]
End Function
说明:
1)Function过程以Function开头,End Function 结束,之间是描述过程操作的语句块,即“过程体”或“函数体”。格式中的“过程名”、“参数列表”、Public、Private、Friend、Static、Exit Function的含义与Sub过程相同。“As数据类型”是由Function过程返回的值的数据类型,如省略,则为Variant。
如:已知直角三角形两直角边的值,计算斜边,可定义一个Function函数。
Function hypotenuse(A as integer,B as integer) as string
hypotenuse=sqr(A^2+B^2)
End function
再例如:
Function BinarySearch(Lower,Upper As Integer) As Boolean
…… If Lower = Upper Then BinarySearch = True Exit Function Else BinarySearch = False '过程名=表达式 End If ……
End Function
2)调用Sub过程相当于执行一个语句,不返回值;而调用Function过程要返回一个值,因此可以像内部函数一样在表达式中使用。
在VB中调用Function过程的方法和调用任何内部函数的方法是一样的,如调用上面的“hypotenuse”函数:
label1.caption=hypotenuse(Cint(text1.text),cint(text2.text))
strX=hypotenuse(width,height)
函数总是以该函数的名称返回给调用过程一个值。因此,函数中的最后一行语句往往是将函数的最终计算结果放入“过程名”中的赋值语句。例如,下文中的函数过程total1用来为某个工程计算,然后将结果赋值给total1名。
Function total1(cost)
t1=cost*0.05
t2=cost*0.015
total1=t1+t2 '将结果赋值给Function函数total1。
end function
由Function过程返回的值放在上述格式中的“表达式”中,并通过“过程名=表达式”把它的值赋给“过程名”,如果在Function过程中省略“过程名=表达式,则该过程返回一个默认值:数值函数过程返回0值;字符串函数过程返回空字符串;variat函数则返回empty。如果在返回对象引用的Function过程中没有将对象引用赋给name(通过set),则函数返回nothing。一般地,为了能使一个Function过程完成所指定的操作,通常要在过程体中为“过程名”赋值。
3)前面讲过,过程不能嵌套。因此不能在事件过程中定义通用过程(包括Sub过程和Function过程),只能在事件的过程内调用通用过程。
(2)建立Function过程
前面提到的建立Sub过程的三种方法也可用来建立Function过程,只是当用第一种方法建立时,在对话框的“类型”栏内选择“函数”。
(3)调用函数过程
例如:编写一个求最大公约数(GCD)的函数过程。
程序如下:
Function gcd(ByVal x As Integer, ByVal y As Integer) As Integer Do While y <> 0 reminder = x Mod y x = y y = reminder Loop gcd = x End Function
求最大公约数的方法: 两个数a、b,如果b能除尽a,则是这两个数的最大公约数(如6和3的最大公约数是3),否则: GCD(a,b)=GCD(b,a Mod b) 例如:GCD(126,12)=GCD(12,126 Mod 12)=GCD(12,6)=6 |
下面介绍如何调用这个过程。
调用Function过程比较简单,可以像使用VB内部函数一样调用。因为Function过程返回一个值,所以完全可以将它看成一个函数,与内部函数(如Sqr,Str,Chr等)没什么区别,只不过内部函数由语言系统提供,而Function过程由用户自己定义。
如下面的事件过程调用了上面的“gcd”函数:
Private Sub Form_Click() Dim a As Integer, b As Integer a = 96: b = 64 x = gcd(a, b) '注意这里的x与上面的x无关。 Print "G.C.D="; x End Sub
最后运行的结果为:
G.C.D = 32
|