共用方式為


Function 程序

更新:2007 年 11 月

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 程序所用的同一方法,宣告每一個參數。

資料型別

每一個 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.

    Returnexpression

    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 函式 (Visual Basic)StrComp 函式 (Visual Basic) 等常見的函式。您可以用呼叫自己的 Function 程序之方式來呼叫這些函式。

請參閱

工作

HOW TO:建立傳回值的程序

HOW TO:傳回程序的值

HOW TO:呼叫傳回值的程序

概念

Visual Basic 中的程序

Sub 程序

Property 程序

運算子程序

程序參數和引數

參考

Function 陳述式 (Visual Basic)