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 プロシージャによって呼び出し元のコードに返される値は、戻り値と呼ばれます。 プロシージャが値を返すには、次の 2 とおりの方法があります。
プロシージャのステートメントの自身の関数名に値を代入します。 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 プロシージャは、直角三角形の最も長い辺 (斜辺) を、他の 2 つの辺の値を基に計算します。
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 プロシージャと同じように呼び出すことができます。
参照
処理手順
方法: 値を返すプロシージャを作成する (Visual Basic)
方法: プロシージャから値を返す (Visual Basic)
方法: 値を返すプロシージャを呼び出す (Visual Basic)
参照
Function ステートメント (Visual Basic)