参照型と値型の値渡しと参照渡しについて

型は大別すると参照型と値型にわけられる。
だから引数として渡すパターンとして、


参照型の値渡しと参照渡し
値型の値渡しと参照渡し


がある。


参照型と値型のそれぞれが何を値として持っているかに着目すれば、
参照型と値型で値渡しと参照渡しの動作は変わらないのだけど、
そこに着目しないと参照型と値型で動作が変わる様に感じるかもしれない。
とはいえ、着目しなくても4パターン知ってればよいわけだから、
そんなに難しい話でもない。


値型は実体そのものが値である。
参照型は実体への参照が値である。


値渡しは保持しているものは変更できないという事。
(値のコピーを渡しているに過ぎないから、呼び元の変数の値に影響は与えられないという事)
だから、参照型が参照している実体の中身は変更が可能。


参照渡しは保持しているものを変更できるという事。
(値の参照を渡しているから、呼び元の変数の値に影響を与えてしまうという事)
だから、参照型が参照している先を変更できてしまう。


より自由度が高く、そして殆どの局面で利用する必要がない。
参照型の参照渡しが必要な設計は殆どの場合、あまり良い設計とは言えず、
(殆どの場合であり、全てが良い設計ではないとは思わない。
 必要な局面も確実にある。)
一度、戻り値で返す設計にできないか検討するべきだと思う。

過去にこんなエントリもありました。

メソッドを定義するときに、refキーワードを参照型に付けたときと付けなかったときの違いは、簡単に言えば・・・

・ref付きは参照する場所を変更出来る。
・ref無しは参照する場所を変更出来ない。
・両方とも、参照先のオブジェクトが持った値を変更する事は可能。