「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

ByRef

pointこの用語のポイント

point参照渡しを示す目印だよ

point変数の置いてある場所を書いた紙を渡すよ

pointVBとかVBAの話で出てくるよ

スポンサーリンク

簡単に書くよ

ByRef(読:バイレフ)とは

VB(プログラムの元ネタを書くときに使う言葉(プログラミング言語)のひとつ)とかVBA(Microsoft Office製品用にあれこれ調整したVisual Basic)の話で出てくるかもしれない用語のひとつ
であり

「この変数(プログラミングにおける値を入れておく箱)(引数(関数に渡す値)は参照渡し(変数の置いてある場所が書かれた紙を渡して「ここにある変数を使ってね」と伝えるやり方)ですよ!」を示す目印
です。


image piyo

詳しく書くよ

順番に見ていきましょう。
まずは予備知識として

VB
VBA
変数
関数
引数(ヒキスウ)
参照渡し(と値渡し


について説明します。
特に参照渡し(と値渡し)については結構ガッツリ説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。

VBVBAプログラミング言語です。
詳細は、それぞれの用語の説明を ご覧ください。

ByRef

変数は「プログラミング言語における『値を入れておく箱』」です。
処理の途中で値を入れたり、逆に取り出したりできます。

ByRef2

関数は「何かを入れると何かをやって何かを返してくれる、処理のまとまり」です。
一般的には、入力を受けて処理をやり、その結果として出力があります。

ByRef3

引数は「プログラムや関数に渡す値」です。

ByRef4

ちょっと汚い話で恐縮ですが、人間は ご飯を食べて、ウンチを出します。

ByRef5

人間を関数だとすれば、ご飯に相当するものが引数です。
あと、ついでなので書いておくと、ウンチに相当するものは戻り値です。

ByRef6

参照渡しは引数の渡し方のひとつで「変数が置いてある場所を書いた紙を渡すやり方」です。

関数に変数を引数として渡すときの渡し方には、実は2種類あります。
それは

1.元の変数の置いてある場所を書いた紙を渡すやり方
2.元の変数をコピーして渡すやり方


の2つです。

ByRef7

この2つの渡し方のうち

1.元の変数の置いてある場所を書いた紙を渡すやり方

が参照渡しです。

ByRef8

あと、ついでなので書いておくと

2.元の変数をコピーして渡すやり方

の方は「値渡し」と言います。
気が向いたら、併せて覚えてあげてください。

ByRef9

例えば、そうですね。

ここにピヨ太関数が ありました。

ByRef10

ピヨ太関数は変数「ミカン箱」に値「ミカン1つ」を入れました。

ByRef11

ピヨ太関数は値「ミカン1つ」が入った変数「ミカン箱」をピヨ子関数に引数として渡すことにしました。

ByRef12

順番が前後しますが、まずは値渡しから説明します。

値渡しの場合、ピヨ太関数は変数「ミカン箱」をコピーします。

ByRef13

※ピヨの左手ピヨの右手(ピヨピヨフェイク)の詳細が気になる方は、用語「ピヨの左手ピヨの右手」の説明を ご覧ください。

次に、コピーした変数「ミカン箱」を「これを使ってね」とピヨ子関数に渡します。

ByRef14

これが値渡しです。
変数「ミカン箱」は2つに分身します。

ByRef15

おっと!大変です。
ピヨ子関数が変数「ミカン箱」の中にあるミカンを食べてしまいました。

ByRef16

でも大丈夫です。

ピヨ子関数に渡したのはコピーした変数「ミカン箱」です。
ピヨ太関数の手元にある変数「ミカン箱」の中身のミカンは残っています。

ByRef17

これが値渡しの特徴です。

呼び出した関数内で変数の値を書き換えても、呼び出し元の変数は影響を受けない

のです。

「えっ?それって普通じゃないの?」と思う人もいるでしょう。
プログラミングを始めたばっかりの人ほど「普通のことを何もったいぶって説明してるんだ」と感じるはずです。

まぁ、落ち着いて最後まで読んでくださいな。

次に参照渡しの説明をします。

参照渡しでは、ピヨ太関数はピヨ子関数に「変数『ミカン箱』の置いてある場所」を書いた紙を渡します。
「変数『ミカン箱』を使いたければ、この紙を頼りに探して、見つかった変数『ミカン箱』を使ってね!」なのです。

ByRef18

これが参照渡しです。
値渡しのときと違って、変数「ミカン箱」は分身しません。
1つだけです。

ByRef19

おっと!大変です。
ピヨ子関数が「変数『ミカン箱』の置いてある場所」を書いた紙をもとにして変数「ミカン箱」を見つけ、変数「ミカン箱」の中にあるミカンを食べてしまいました。

ByRef20

ピヨ子関数がミカンを食べた変数「ミカン箱」は、ピヨ太関数の手元にある変数「ミカン箱」と同じものです。
ピヨ太関数の手元にある変数「ミカン箱」の中にあるミカンが、なくなってしまいました。

ByRef21

これが参照渡しの特徴です。

呼び出した関数内で変数の値を書き換えると、呼び出し元の変数の中身も書き変わる

のです。

並べて書くと、以下のようになります。

■値渡し
・変数のコピーを渡す
・変数の中身を書き換えても呼び出し元には影響しない

■参照渡し
・変数の置いてある場所を書いた紙を渡す
・変数の中身を書き換えると呼び出し元の変数の中身も書き変わる


せっかくなので、もう少しプログラミングっぽい例も挙げてみましょう。

例えば、引数を値渡しする以下の処理があったとします。

ピヨ太関数(){
 ミカン箱=ミカン1

 ピヨ子関数呼び出し(【値渡し】ミカン箱)

 ミカン箱の中身を表示

}

ピヨ子関数(ミカン箱){
 ミカン箱=ミカン0
}


この処理を実行すると

ミカン1

と表示されます。

ピヨ子関数の中で何が起ころうと影響を受けないからです。
ピヨ太関数がミカン箱に対してやった処理は

1.ミカン箱=ミカン1
2.ミカン箱の中身を表示


の2つだけです。

引数を参照渡しする以下の処理もありました。

ピヨ太関数(){
 ミカン箱=ミカン1

 ピヨ子関数呼び出し(【参照渡し】ミカン箱)

 ミカン箱の中身を表示

}

ピヨ子関数(ミカン箱){
 ミカン箱=ミカン0
}


こちらの処理は、実行すると

ミカン0

と表示されます。

ピヨ太関数のミカン箱とピヨ子関数のミカン箱は同じものだからです。
ピヨ太関数がミカン箱に対してやった処理は

1.ミカン箱=ミカン1
2.ミカン箱=ミカン0(ピヨ子関数の中でやった処理結果が反映される)
3.ミカン箱の中身を表示


の3つになります。

これが値渡しと参照渡しの違いです。

基本的に、関数に対して情報を与えたいだけの場合は値渡しを使います。
呼び出し元から呼び出し先の関数に対する一方通行の場合です。

ByRef22

関数内での変更を呼び出し元にも反映したい場合は参照渡しを使います。
呼び出し元と呼び出し先の関数で双方向のやり取りをしたい場合です。

ByRef23

「どっちにすれば良いのかな?」と迷った場合は「値渡し」にしてください。
値渡しの方が考え方も単純ですし影響範囲も分かりやすいはずです。
それで進めてみて「値渡しでは無理だな!」と分かった時点で参照渡しに変更しましょう。

特にプログラミング初心者の場合は「全部、値渡しで作ってやるぜ!」な心持ちでいて、どうしても実現できないところだけ参照渡しを使うようにした方がバグ(プログラムの おかしいところ)は少なくなると思います。

以上を踏まえて

「この引数は参照渡しですよ!」を示す目印

が「ByRef」です。
「ByRef」という表現はVBとかVBAで出てきます。
例えば

Sub hoge_sub(ByRef hikisuu As Integer)

【何かの処理】

End Sub


のように書くと、引数「hikisuu」は参照渡しになります。

ByRef24

あと、ついでなので書いておくと「この引数は値渡しですよ!」を示す目印は「ByVal」です。
例えば

Sub hoge_sub(ByVal hikisuu As Integer)

【何かの処理】

End Sub


のように書くと、引数「hikisuu」は値渡しになります。

ByRef25

気が向いたら、セットで覚えてあげてください。

ByRef:参照渡しを示す目印
ByVal:値渡しを示す目印


です。


image piyo2

一言でまとめるよ

まぁ「ByRef」って単語が出てきたら「参照渡し(変数の置いてある場所が書かれた紙を渡して「ここにある変数を使ってね」と伝えるやり方)を示す目印なんだな~」と お考えください。

一番上に戻るよ
スポンサーリンク
書籍画像027
書籍画像071

おまけ

■訳してみるよ

「ByRef」は多分「by reference」の略です。
「by(バイ)」の意味は「~によって」とかです。
「reference(リファレンス)」の意味は「言及」とか「論及」とか「参照」とか「照合」とか「参考」とか「引用文」とか「参考文献」とか「参考図書」とかです。
何となく くっつけると

参照によって

となります。




書籍画像
わわわ説明術コラム
宣伝だよ
優れたエンジニアがコミュニティの中でしていること
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本【Audible】
体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践