FreeBASIC マニュアルのトップに戻る

FreeBASIC ProPgPassingArguments

目次→教本→プログラマーのための案内Passing Arguments to Procedures←オリジナル・サイト

引数を手続きに受渡す 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

情報を、手続きに渡します。

パラメタを宣言
手続きが呼ばれるとき、手続きは、変数とオブジェクトの形で渡される情報を、受け取ることがができます。
手続き呼び出しの文脈で、これらの変数とオブジェクトは、引数と呼ばれます。
そして、これらの引数は、いわゆるパラメタとして、手続きの本体の中で、表されます。
パラメタは、いかなる他の変数やオブジェクトと、まったく同じように使用できます。

手続きを呼ぶときに、引数を渡すようにするために、パラメータ・リストを付けて、手続きを宣言してください。
パラメータ・リストは、1つ以上の、名前と型のリストです。手続きは、手続きに渡される引数を参照するとき、その名前と型を使います。
パラメータ・リストは、丸括弧で囲みます。

Sub Procedure (s As String, n As Integer)
    Print "パラメタには、値があります: " & s & " と " & n
End Sub

Procedure "abc", 123
Sleep


下のように出力されるはずです:

パラメタには、値があります: abc と 123

引数を手続きに渡す、2つの方法があります:
値渡しと、参照渡しです。
別の方法で指定しない場合、デフォルトで、引数は値で渡されます。

引数の値受渡し
値によって渡される引数は、実際に手続きに渡されません。
引数のコピーが、代わりに作られていて、渡されます。
これは、手続きはコピーを変更できることを意味します。そして、元の変数やオブジェクトは、変わらずに残ります。

オブジェクトを、値で手続きに渡すとき、コピーは、TypeClass のコピー構築子を呼ぶことで、なされます。

引数を値で渡すように指定するには、手続きの宣言で、Byval 予約語を、パラメタ名の前に付けてください:

Sub Procedure (ByVal param As Integer)
    param *= 2
    Print "パラメータ 'param' = " & param
End Sub

Dim arg As Integer = 10
Print "呼び出し前の 'arg' の値 = " & arg
Procedure (arg)
Print "呼び出し後の 'arg' の値 = " & arg
Sleep


下のように出力されるはずです:

呼び出し前の 'arg' の値 = 10
パラメータ 'param' = 20
呼び出し後の 'arg' の値 = 10

丸括弧が、手続き呼び出しで、どのように、引数(上の場合は、arg 1つだけ)を囲むか、に注意してくださいか。
これらの丸括弧は、任意ですが、手続き呼び出しを表す、一般的な規則です。

引数の参照受渡し
値によって渡される引数と異なって、手続きに参照で渡されるされる引数は、本当に渡されます。
コピーは、作られません。
これは、手続きは、手続きに渡された元の変数やオブジェクトを、変更できることを意味します。

参照は、変数やオブジェクトの、別名に似ています。
参照を呼ぶときはいつも、実際の変数やオブジェクトを、その別名で呼んでいるのです。
言い換えれば、手続きの参照パラメタを、手続きに渡される引数と考えることができます。
参照パラメタにされた変更は、すべて、実際にそれが表す引数の変化です。

引数を、参照で渡すように指定するには、手続きの宣言で、Byref 予約語を、パラメタ名の前に付けてください:

Sub Procedure (ByRef param As Integer)
    param *= 2
    Print "パラメータ 'param' = " & param
End Sub

Dim arg As Integer = 10
Print "呼び出し前の 'arg' の値 = " & arg
Procedure (arg)
Print "呼び出し後の 'arg' の値 = " & arg
Sleep


下のように出力されるはずです:

呼び出し前の 'arg' の値 = 10
パラメータ 'param' = 20
呼び出し後の 'arg' の値 = 20


手動でポインターを副参照パラメータに渡す
Byval キーワードを、Byref パラメータに対する引数の前で、指定することによって、アドレス(通常ポインターに保存される)は、現状のままで直接渡されることができます。そして、Byref パラメータに、アドレスが指した同じ記憶域に、リファレンスをつけることを、強いることができます。

Sub f( ByRef i As Integer )
    i = 456
End Sub

Dim i As Integer = 123
Dim pi As Integer Ptr = @i

Print i
f( ByVal pi )
Print i
Sleep



参照:
プログラマーのための案内に戻る
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2022-05-30 05:57:32
日本語翻訳:WATANABE Makoto、原文著作者:LaananFisher

ホームページのトップに戻る

表示-非営利-継承