Function過程
VBScript 中,過程被分為兩類
:Sub 過程和 Function 過程。
Function 過程是包含在 Function 和 End Function 語句之間的一組 VBScript 語句。Function 過程與 Sub 過程類似,但是 Function 過程可以返回值。Function 過程通過函式名返回一個值,這個值是在過程的語句中賦給函式名的。Function 返回值的數據類型總是 Variant。
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
modifiers 可以指定與重載、重寫、共享和隱藏相關的訪問級別和信息。有關更多信息,請參見 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)