LoginSignup
0
1

More than 3 years have passed since last update.

【Ruby】値渡しと参照渡し

Posted at

「値渡し」「参照渡し」とは

関数やメソッドにおける引数の渡し方の種類を表す用語のこと。
Rubyだけではなくどのプログラミング言語でも共通する。

値渡し

  • 実引数の値をコピーして仮引数に渡す
  • コピーを渡すので、実引数には影響なし
  • Rubyは値渡し(他の言語も)

参照渡し

  • 実引数の変数があるメモリ上の場所(メモリ番地)をコピーして仮引数に渡す
  • 与えられたメモリ番地から実引数の値を辿って値を変更する
  • 仮引数に変更を加えると実引数も変更される

参照の値渡し?

  • 変数が参照(メモリ番地)を保持している場合、参照がコピーされる
  • 「オブジェクトの参照(メモリ番地)」をコピーして実引数に渡すので、同じオブジェクトを共有しているということになる
  • つまり、引数が指すオブジェクトを変更すると元の変数のオブジェクトも変更される
  • あたかも「仮引数を変更したら実引数も変更された」ように見えるだけで、実際は値渡し
  • 「変数を変更する」ことと「変数が指すオブジェクトを変更する」ことは別!

引用元

値渡しと参照渡しの違いを理解する

メモリ番地でイメージするととてもわかりやすかったです。
今日学んだことを可視化するためにとりあえず書いてみました。後程自分の中で噛み砕いてまとめます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1