打印本文 打印本文  关闭窗口 关闭窗口  
VB考试教程之Function过程[1]
作者:佚名  文章来源:不详  点击数  更新时间:2008/4/18 14:45:58  文章录入:杜斌  责任编辑:杜斌

    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


 

打印本文 打印本文  关闭窗口 关闭窗口