院卒新人サラリーマンのメモ代わり

備忘としてのメモを記載

参照渡しと値渡し


magazine.rubyist.net

値渡し:
変数の値のコピーを渡す。
もとの変数とは関係ない。
関数の出力は引数のみに依存。
副作用がない関数が作れる。

参照渡し:
変数のメモリ番地を渡す。
変更するともとの変数も変わる。
副作用が起こる。

参照の値渡し:
変数のメモリ番地のコピーを渡す。
変更するともとの変数も変わる。
副作用が起こる(意図せず)。
rubyでの配列の変数にはメモリ番地が入っている。
だから配列を実引数として渡すとこれになっちゃう。
numbers[0] = 11 #メモリ番地は変わらない、配列の実体に要素を追加
numbers = [11, 12] #メモリ番地を変更、新しい配列の実体が作られる



インスタンスについて:
インスタンス変数を変更するには参照渡しを使うしかない。
値渡しだと変更が保持されないから。
インスタンスメソッドは参照渡しをするような仕様になっているのだろう(推測)

ポインタについて:
参照渡しとほぼ同等な気がする。
状態を変更したいときに使う。
構造体の変数を変更するには、関数を参照渡しで実装するしかない。
だからgo言語の構造体の関数はポインタを指定するのだろう。