変数に別の変数を代入する

変数にはオブジェクトを代入することができますが、別の変数を代入することもできます。この場合は代入した変数と代入された変数は同じオブジェクトが保管されている場所が格納されることになります。ここでは Ruby で変数に別の変数を代入する方法について解説します。

(2022 年 10 月 13 日公開 / 2022 年 10 月 27 日更新)

変数に別の変数を代入する

Ruby では同じ値であってもオブジェクトは別々です。次の例を見て下さい。

v1 = "東京都"
v2 = "東京都"

puts(v1.object_id)  # 60
puts(v2.object_id)  # 80

同じ値の文字列を変数 v1 と v2 に代入したあと、それぞれのオブジェクトの識別子である id を object_id メソッドを使って取得しています。見て頂くと分かりますが、同じ値であってもオブジェクトはそれぞれ別のものになっています(整数の値や true などは例外で同じ値の場合は同じオブジェクトとなります)。

では次の変数にオブジェクトを代入したあと、その変数を別の変数に代入した場合です。次の例を見てください。

v1 = "東京都"
v2 = v1

puts(v1.object_id)  # 60
puts(v2.object_id)  # 60

今度は変数 v1 と v2 が同じオブジェクトとなりました。変数にオブジェクトを代入すると、オブジェクトを保管している場所が格納されますが、変数を別の変数に代入するとオブジェクが保管されている場所が別の変数にも格納されるため、 2 つの変数は同じオブジェクトが保管されている場所の情報を持つためです。

2 つの変数は同じオブジェクトを参照することになるため、どちらかの変数を使ってオブジェクトそのもに変更を加えると、もう片方の変数にも影響が出ます。次の例を見てください。

v1 = "東京都"
v2 = v1

puts(v1)  # 東京都
puts(v2)  # 東京都

v1 << "港区"

puts(v1)  # 東京都港区
puts(v2)  # 東京都港区

変数が参照しているオブジェクトそのものに "港区" という文字列を追加したので、もう片方の変数を参照すると同じように変更が加えられています。

なおご注意いただきたいのは、オブジェクトそのものに変更を加えた場合です。どちらかの変数に新しいオブジェクトを代入した場合は、代入された変数に新しいオブジェクトを保管している場所の情報が格納されることになるので、 2 つの変数は別々のオブジェクトを参照することになります。次の例を見てください。

v1 = "東京都"
v2 = v1

puts(v1)  # 東京都
puts(v2)  # 東京都

v1 = "神奈川県"

puts(v1)  # 神奈川県
puts(v2)  # 東京都

今回の場合はオブジェクトそのものに変更を加えたのではなく、別のオブジェクトを変数に代入したので、もう片方の変数が参照しているオブジェクトには影響がありません。

サンプルコード

では簡単なプログラムで確認してみます。

# encoding: UTF-8

v1 = "東京都"
v2 = v1

puts(v1)
puts(v2)

puts()

v1 << "港区"

puts(v1)
puts(v2)

puts()

v2 = "神奈川県"

puts(v1)
puts(v2)

下記のように実行して下さい。

他の変数を代入

-- --

Ruby で変数に別の変数を代入する方法について解説しました。

( Written by Tatsuo Ikura )

広告
Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。