分類
Function過程是包含在Function和End Function語句之間的一組VBScript語句。
Function Celsius(fDegrees)
Celsius = (fDegrees - 32) * 5 / 9
End Function
可以在模塊、類或結構中定義Function過程。默認情況下此過程為Public,這意味着您可以從能夠訪問定義了此過程的模塊、類或結構的應用程序中的任何地方調用此過程。
Function過程能夠帶參數,如由調用代碼傳遞給它的常數、變量或表達式。
聲明語法
聲明Function過程的語法如下所示:
[ modifiers ] Function functionname [( parameterlist )] As returntype
' Statements of the Function procedure.
End Function
modifier可以指定與重載、重寫、共享和隐藏相關的訪問級别和信息。有關更多信息,請參見Function語句(Visual Basic)。
聲明每個參數的方法與聲明Sub過程的方法相同。
數據類型
每個Function過程都具有數據類型,就和每個變量都具有數據類型一樣。此數據類型由Function語句中的As子句指定,它确定函數返回給調用代碼的值的數據類型。下面的示例聲明演示了這一點。
複制代碼
Function yesterday() As Date
End Function
Function findSqrt(ByVal radicand As Single) As Single
End Function有關更多信息,請參見Function語句(Visual Basic)中的“各部分說明”。
返回值
Function過程發送回調用代碼的值稱為它的“返回值”。此過程使用以下兩種方式之一返回此值:
它在過程的一個或多個語句中給自己的函數名賦值。在執行Exit Function 或 End Function語句之前,控制不會返回調用程序。下面的示例演示這一點。
Function functionname [( parameterlist )] As returntype
' The following statement does not transfer control back to the calling code.
functionname = expression
' When control returns to the calling code, expression is the return value.
End Function
它使用Return語句指定返回值,并直接将控制返回調用程序。下面的示例演示這一點。
Function functionname [( parameterlist )] As returntype
' The following statement immediately transfers control back to the calling code and returns the value of expression .
Return expression
End Function
将返回值分配給函數名的優點是,直到控制遇到Exit Function或End Function語句時才從過程返回控制。這樣就可以先分配一個初步的值,以後如有必要再進行調整。
有關更多信息,請參見Function語句(Visual Basic)中的“返回值”。
返回數組
如果Function過程返回數組數據類型,則不能在函數内部訪問數組的各個元素。如果試圖這樣做,編譯器會将它解釋為對過程的遞歸調用。下面的示例演示這一點。
Function allOnes(ByVal n As Integer) As Integer()
For i As Integer = 1 To n - 1
' The following statement generates a COMPILER ERROR .
allOnes(i) = 1
Next i
' The following statement generates a COMPILER ERROR .
Return allOnes()
End Function
在前面的示例中,編譯器将嘗試的賦值allOnes(i)=1解釋為對賦值語句左邊的allOnes的調用。它将嘗試的Return allOnes()解釋為沒有參數的調用。兩個語句都将生成編譯器錯誤。
調用語法
調用Function過程的方法是将其名稱和參數放在賦值語句的右邊或表達式中。必須提供所有非可選參數的值,并且必須用括号将參數列表括起來。如果未提供任何參數,則也可以選擇省略括号。
調用Function過程的語法如下所示:
lvalue = functionname [( argumentlist )]
If (( functionname [( argumentlist )] / 3) <= expression ) Then
當調用Function過程時,不必使用它的返回值。如果不使用它的返回值,将執行函數的所有操作,而忽略返回值。通常使用此方式調用MsgBox。
聲明與調用闡釋
下面的Function過程通過給定的直角三角形的兩條直角邊計算該三角形的最長邊(即斜邊)。
Visual Basic複制代碼Function hypotenuse(ByVal side1 As Single, ByVal side2 As Single) As Single
Return Math.Sqrt((side1 ^ 2) + (side2 ^ 2))
End Function
下面的示例演示對hypotenuse的典型調用。
Visual Basic複制代碼Dim testLength, testHypotenuse As Single
testHypotenuse = hypotenuse(testLength, 10.7)