戻り値
値を式で使用したり、変数に代入したりできるように、関数の終了時に値を持つ
Function 手続きの機能を指します。
関数の値は、3つの方法で、返すことができます:
- Return キーワードの後に値が続くと、すぐに関数を終了し、その値を呼び出し元に返します。
- 関数は、目的の戻り値に
Function キーワードか
function_identifier を代入して値を返すこともできます (ただし、
Function キーワードまたは
function_identifier では、現在代入されている値を評価することはできません)。 後者の 2 つの方法では、関数は終了しません。
'' 関数の名前を使って、戻り値を設定して、関数を実行し続けます。:
Function myfunc1() As Integer
myfunc1 = 1
End Function
'' 予約語 'Function' を使って、戻り値を設定して、関数を実行し続けます。:
Function myfunc2() As Integer
Function = 2
End Function
'' 予約語 'Return' を使って、戻り値を設定します。この場合は、直ぐに、関数から出ます。:
Function myfunc3() As Integer
Return 3
End Function
Sleep
'' このプログラムは、値を返す関数を示します。
Declare Function myFunction () As Integer
Dim a As Integer
'ここで、myFunction が返すものを受け取って、それに 10 を加えます。
a = myFunction() + 10
'myFunction が 10 を返すのを知っています。10+10=20 を得て、20 を表示します。
Print a
Function myFunction () As Integer
'ここで、10 を返すように myFunction に伝えます。
Function = 10
End Function
Sleep
コンストラクターを使用してオブジェクトを返す場合、同じ関数内で Function= キーワード
、function_identifier=、Exit Function キーワードと混合された Return キーワードはサポートされていません。
参照を返す
関数の結果は、値によってではなく、参照によって返すことができます。
プログラムの動作は、全く異なります。
Byref 関数結果を、
Function = variable か
Return variable 命令文を通して割り当てるとき、関数は、変数の値のコピーを返しません。その代わりに、その変数への参照を返します。
その関数の呼び手は、関数から返される参照を通して、変数を修正することができます。手でポインターを使う必要はありません。
これは、
Byref パラメータに、とてもよく似ています。
更に詳しくは、
Byref (関数の結果) を参照下さい。
手動で Byref 関数から出なりのポインターを返す
Function = variable か Return variable 命令文で、結果変数の前に Byval キーワードを指定することによって、アドレス(通常ポインターに保存される)は、ありのままの状態で直接渡されることができます。そして、Byref 関数結果に、アドレスが指した同じメモリ場所に参照をつけることを強います。
たとえば:
Dim Shared i As Integer = 123
Function f( ) ByRef As Integer
Dim pi As Integer Ptr = @i
Function = ByVal pi
'' or, with RETURN it would look like this:
Return ByVal pi
End Function
Print i, f( )
Sleep
参照: