Function ステートメント (Visual Basic)

更新 : 2007 年 11 月

Function プロシージャを定義する名前、パラメータ、およびコードを宣言します。

sect4ck6.alert_note(ja-jp,VS.90).gifメモ :

Visual Basic 2008 では、関数式をインラインで定義するためのラムダ式が導入されています。詳細については、「Function 式」および「ラムダ式」を参照してください。

[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] 
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
    [ statements ]
    [ Exit Function ]
    [ statements ]
End Function

指定項目

  • attributelist
    省略可能です。「属性リスト」を参照してください。

  • accessmodifier
    省略可能です。次のいずれかになります。

    Visual Basic でのアクセス レベル を参照してください。

  • proceduremodifiers
    省略可能です。次のいずれかになります。

  • Shared
    省略可能です。「Shared (Visual Basic)」を参照してください。

  • Shadows
    省略可能です。「Shadows」を参照してください。

  • name
    必ず指定します。 プロシージャの名前を指定します。宣言された要素の名前 を参照してください。

  • typeparamlist
    省略可能です。ジェネリック プロシージャの型パラメータ リストを指定します。「型リスト」を参照してください。

  • parameterlist
    省略可能です。このプロシージャのパラメータを表すローカル変数名のリストを指定します。「パラメータの一覧」を参照してください。

  • returntype
    Option Strict が On の場合は、必ず指定します。このプロシージャによって返される値のデータ型を指定します。

  • Implements
    省略可能です。このプロシージャが 1 つ以上の Function プロシージャを実装し、このプロシージャの包含クラスまたは包含構造体によって実装されたインターフェイスに各 Function プロシージャが定義されていることを示します。Implements ステートメント を参照してください。

  • implementslist
    Implements が指定されている場合は、必ず指定します。実装する Function プロシージャのリストを指定します。

    implementedprocedure [ , implementedprocedure ... ]

    implementedprocedure の構文と指定項目は次のとおりです。

    interface.definedname

    指定項目

    説明

    interface

    必ず指定します。このプロシージャの包含クラスまたは包含構造体によって実装されるインターフェイスの名前を指定します。

    definedname

    必ず指定します。interface の中でプロシージャを定義するために使われる名前を指定します。

  • Handles
    省略可能です。このプロシージャが 1 つ以上の特定のイベントを処理できることを示します。Handles を参照してください。

  • eventlist
    Handles が指定されている場合は、必ず指定します。このプロシージャが処理するイベントのリストを指定します。

    eventspecifier [ , eventspecifier ... ]

    eventspecifier の構文と指定項目は次のとおりです。

    eventvariable.event

    指定項目

    説明

    eventvariable

    必ず指定します。イベントを生成するクラスまたは構造体のデータ型で宣言したオブジェクト変数を指定します。

    event

    必ず指定します。このプロシージャが処理するイベントの名前を指定します。

  • statements
    省略可能です。このプロシージャ内で実行されるステートメントのブロックを指定します。

  • EndFunction
    このプロシージャの定義を終了します。

解説

すべての実行可能コードをプロシージャに含める必要があります。各プロシージャを順番にクラス、構造体、またはモジュールの中に宣言します。これらは、包含クラス、包含構造体、または包含モジュールと呼ばれます。

呼び出し元のコードに値を返す必要がある場合は、Function プロシージャを使用します。値を返す必要がない場合は、Sub プロシージャを使用します。

Function プロシージャは、モジュール レベルでのみ定義できます。つまり、関数の宣言コンテキストは、クラス、構造体、モジュール、またはインターフェイスであることが必要で、ソース ファイル、名前空間、プロシージャ、またはブロックでは宣言できません。詳細については、「宣言コンテキストと既定のアクセス レベル」を参照してください。

Function プロシージャのアクセス レベルは、既定でパブリックです。アクセス修飾子を使用してこれらのアクセス レベルを調整できます。

関数が返す値を使用する場合は、式の右辺で Function プロシージャを呼び出すことができます。Function プロシージャは、Sqrt、Cos、または ChrW などのライブラリ関数と同じ方法で使用します。

Function プロシージャを式の中から呼び出すには、プロシージャ名の後に引数リストをかっこで囲んで指定します。指定する引数がない場合に限って、かっこを省略できます。ただし、常にかっこで囲むとコードは読みやすくなります。

また、Call ステートメントで関数を呼び出すこともできます。この場合、戻り値は無視されます。

規則

  • **戻り値の型。**Function ステートメントは、戻り値のデータ型を宣言できます。任意のデータ型、または列挙、構造体、クラス、またはインターフェイスの名前を指定できます。

    returntype を指定しなかった場合は、プロシージャは Object を返します。

  • **実装。**このプロシージャが Implements キーワードを使用する場合、包含クラスまたは包含構造体も Implements ステートメントを Class ステートメントまたは Structure ステートメントの直後に記述する必要があります。Implements ステートメントには、implementslist に指定されたすべてのインターフェイスが含まれる必要があります。ただし、Function を定義するためにインターフェイスで使用される名前 (definedname 内) は、このプロシージャの名前 (name 内) と同じである必要はありません。

動作

  • プロシージャからの戻りFunction プロシージャが呼び出し元のコードに戻ると、プロシージャを呼び出したステートメントの次のステートメントから実行が継続します。

    Exit Function ステートメントおよび Return ステートメントは、Function プロシージャを直ちに終了します。Exit Function ステートメントと Return ステートメントは、プロシージャ内の任意の位置で何回でも指定できます。また Exit Function ステートメントと Return ステートメントを混在して使用できます。

  • **戻り値。**関数から値を返すには、関数名に値を割り当てるか、または Return ステートメントに値を設定します。戻り値を myFunction という名前の関数に割り当てて、Exit Function ステートメントを使って返すコード例を次に示します。

    Function myFunction(ByVal j As Integer) As Double
        myFunction = 3.87 * j
        Exit Function
    End Function
    

    name に値を割り当てずに Exit Function を使用すると、プロシージャは returntype に指定されたデータ型の既定値を返します。returntype を指定しないと、プロシージャは Object の既定値である Nothing を返します。

    Return ステートメントは、戻り値を割り当て、同時に関数を終了します。次に例を示します。

    Function myFunction(ByVal j As Integer) As Double
        Return 3.87 * j
    End Function
    

トラブルシューティング

  • **実行順序。**Visual Basic では、演算効率を高めるために数式が自動的に並べ替えられることがあります。このため、変数の値を変えてしまうような Function プロシージャを数式の中で実行しないようにしてください。

使用例

Function ステートメントを使って、Function プロシージャの名前、パラメータ、および本体を構成するコードを宣言するコード例は、次のとおりです。ParamArray 修飾子を使用すると、関数で異なる数の引数を処理できます。

Public Function calcSum(ByVal ParamArray args() As Double) As Double
    calcSum = 0
    If args.Length <= 0 Then Exit Function
    For i As Integer = 0 To UBound(args, 1)
        calcSum += args(i)
    Next i
End Function

次のコード例は、上記の例で宣言した関数を呼び出します。

Dim returnedValue As Double = calcSum(4, 3, 2, 1)
' The function's local variables are assigned the following values:
' args(0) = 4, args(1) = 3, and so on.

参照

処理手順

方法 : ジェネリック クラスを使用する

プロシージャのトラブルシューティング

概念

パラメータ配列

ラムダ式

参照

Sub ステートメント (Visual Basic)

パラメータの一覧

Dim ステートメント (Visual Basic)

Call ステートメント (Visual Basic)

Of

Function 式