Function 程序 (Visual Basic)
Function 程序是一組以 Function 和 End Function 陳述式前後括起來的 Visual Basic 陳述式。 Function 程序會執行工作,然後將控制權傳回給呼叫程式碼。 當它傳回控制權時,它也會傳回一值給呼叫程式碼。
每當程序被呼叫時,它的陳述式會以 Function 陳述式之後的第一個可執行陳述式開始執行,並以它所遇到的第一個 End Function、Exit Function 或 Return 陳述式結束。
您可以在模組、類別或結構中定義 Function 程序。 它會預設值為 Public,這表示您可以從應用程式的任何位置呼叫它,但這個應用程式必須在定義它的模組、類別或結構中擁有權限。
Function 程序可以取得由呼叫程式碼所傳送給它的引數,例如常數、變數或運算式。
宣告語法
宣告 Function 程序的語法如下:
[modifiers] Function functionname[(parameterlist)] As returntype
' Statements of the Function procedure.
End Function
modifiers 可以指定存取層級和有關多載、覆寫、共用及遮蔽的資訊。 如需詳細資訊,請參閱 Function 陳述式 (Visual Basic)。
您可以利用對 Sub 程序 (Visual Basic)所用的同一方法,宣告每一個參數。
資料型別
每一個 Function 程序都有一個資料型別,與變數一樣。 這個資料型別是由 Function 陳述式中的 As 子句所指定,而且它可以決定函式傳回給呼叫程式碼之值的資料型別。 下列範例宣告將對此進行說明。
Function yesterday() As Date
End Function
Function findSqrt(ByVal radicand As Single) As Single
End Function
如需詳細資訊,請參閱 Function 陳述式 (Visual Basic) 中的參數。
傳回值
Function 程序傳回給呼叫程式碼的值稱為其「傳回值」(Return Value)。 程序會以下列其中一種方式傳回此值:
它會在程序的一個或多個陳述式中指派一個值給自己的函式名稱。 直到 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 運算式
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 解譯為指派陳述式 (Assignment Statement) 左側的 allOnes 呼叫。 它會將欲執行的 Return allOnes() 解譯為沒有引數的呼叫, 這兩個陳述式都會產生編譯器錯誤。
呼叫語法
您可以藉由將 Function 程序的名稱和引數包括在指派陳述式 (Assignment Statement) 的右邊或在運算式中,以叫用 (Invoke) 該程序。 您必須為所有非選擇性的引數提供值,也必須將引數清單用括號括起來。 如果未提供引數,您也可以省略括號。
呼叫 Function 程序的語法如下:
lvalue = functionname[(argumentlist)]
If ((functionname[(argumentlist)] / 3) <= expression) Then
當您呼叫 Function 程序時,不一定要使用它的傳回值。 如果您不使用,則會執行該函式的所有動作,但會忽略傳回值。 MsgBox 通常會以這種方式呼叫。
宣告和呼叫的說明
下列 Function 程序會在已知其他兩邊值的情況下,計算直角三角形的最長邊 (也稱為斜邊)。
Function hypotenuse(ByVal side1 As Single, ByVal side2 As Single) As Single
Return Math.Sqrt((side1 ^ 2) + (side2 ^ 2))
End Function
下列範例示範 hypotenuse 的典型呼叫。
Dim testLength, testHypotenuse As Single
testHypotenuse = hypotenuse(testLength, 10.7)
Visual Basic 執行階段函式
Visual Basic 執行階段提供了許多位於 Microsoft.VisualBasic 命名空間中的函式。 包括 Beep、MsgBox 和 StrComp 函式等常見函式。 您可以用呼叫自己的 Function 程序之方式來呼叫這些函式。
請參閱
工作
HOW TO:建立傳回值的程序 (Visual Basic)
HOW TO:呼叫傳回值的程序 (Visual Basic)