VB考試教程:過程之Function過程

字號:

3、Function過程
    VB包含內置的或內部的函數,還可用Function語句編寫自己的Function過程。在定義了一個函數之后,可以像調用任何一個VB的內部函數一樣使用它,即可以在任何表達式,語句或函數中引用它。
    函數過程是標準模塊中位中Function語句與End Function 語句之間的一系列語句。函數中的這些語句完成某些有意義的工作,一般是處理文本,進行輸入或計算一個值。
    通過將函數名與任何所需的參數一起置于一條程序語句中,可以調用該函數。換句話說,使用函數過程與使用內置函數(比如Time,Int或Str等)的方法完全相同。
    每個函數完成一種服務,比如進行計算并返回一個值。
    在標準模塊中聲明的函數在缺省的狀態(tài)下是公用函數,它們可在任何事件中過程中使用。
    (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過程相同?!癆s數據類型”是由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過程相當于執(zhí)行一個語句,不返回值;而調用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等)沒什么區(qū)別,只不過內部函數由語言系統(tǒng)提供,而Function過程由用戶自己定義。