前回の頁で軽くご説明した「引数」ですが、今回はもう少し掘り下げてご説明したいと思います。
引数として渡す値の種類
引数に渡す値は、デフォルトでは「値渡し」となっており、引数として渡された値を変更することはできません。 この「値渡し」ではない渡し方として、「参照渡し」という方法があります。
値渡し
引数が「値渡し」で渡された場合は、プロシージャ内で引数に対して別の値を格納しても、プロシージャ終了時には変更が保管されません。
例文を見てみましょう。
このプログラムを実行すると、下の画像のようになります。

プロシージャ内で引数に対して別の値を格納していますが、プロシージャから出ると元に戻っていることがわかると思います。
参照渡し
プロシージャ作成時に、引数の宣言に「ByRef」をつけることで「参照渡し」にできます。
「参照渡し」で引数をプロシージャに渡した場合、プロシージャ内で受け取った引数への変更を保持したまま、呼び出し元へ戻すことができます。
まずは「参照渡し」にする場合の構文から見てみましょう。
「ByRef」ステートメントを入れることで、参照渡しにすることができます。 「ByRef」を入れない場合はデフォルトの「値渡し」となりますが、「値渡し」を明確に表したい時は、「ByVal」ステートメントを入れても同じ結果になります。
余談ではありますが、「ByVal」は「By Value」(値で)、「ByRef」は「By Reference」(参照により)を表しています。
それでは簡単な例文を記述します。
このプログラムを実行すると、下の画像のようになります。

プロシージャ内で変数の値が変更されているのがわかりますね。
値渡しと参照渡しの違い
値渡しで変数を渡すと、変数に格納されている「値」だけを渡すことになります。 参照渡しの場合は、「変数そのもの」を渡すことになります。 どちらのケースも使い所があるため、用途によって使い分けられるとベターですね。
今回のまとめ
- プロシージャの引数として「値渡し」と「参照渡し」がある
- 「値渡し」は値のみを渡す
- 「参照渡し」は変数そのものを渡す
コメント