rubykansaiくんのつぶやき(Rubyの変数の巻)

これは、関西に住むRubyistのコミュニティであるRuby関西の愛すべきキャラクター rubykansaiくんの(ちょっと古い)つぶやきを(がんばって)集めたトゥギャッターなのである!
0
RubyKansai @rubykansai

久しぶりやなぁ。今日はRubyの変数の話でもしよか。 #rubykansai

2011-08-17 19:09:24
RubyKansai @rubykansai

変数いうのんはオブジェクトに付けた名札みたいなもんやな。 #rubykansai

2011-08-17 19:09:53
RubyKansai @rubykansai

Ruby には変数の宣言みたいなもんはないから、いきなり値を代入できるで。こんな感じや。i = 0 #rubykansai

2011-08-17 19:11:11
RubyKansai @rubykansai

i = 0 いうのんは、値が 0 の Fixnum オブジェクトに i っちゅう名前を付けたわけやな。 #rubykansai

2011-08-17 19:11:42
RubyKansai @rubykansai

ほな i に 1 足してみよか。i += 1 でも i = i + 1 でもええわ。 #rubykansai

2011-08-17 19:14:32
RubyKansai @rubykansai

i っちゅう名前のオブジェクトに 1 足した新しいオブジェクトができて、それに i っちゅう名前を付けたんや。わかるか? #rubykansai

2011-08-17 19:16:19
RubyKansai @rubykansai

i は別のオブジェクトの名前になってしもて、元のオブジェクトは名無しになってもうたんや。 #rubykansai

2011-08-17 19:17:18
RubyKansai @rubykansai

文字列でもやってみよか。i = "Ruby関西" #rubykansai

2011-08-17 19:20:26
RubyKansai @rubykansai

これも一緒や。値が "Ruby関西" いう String オブジェクトに i っちゅう名前を付けただけや。 #rubykansai

2011-08-17 19:20:59
RubyKansai @rubykansai

Rubyの変数には型がないから、同じ変数に Fixnum オブジェクトでも String オブジェクトでも代入できるねん。 #rubykansai

2011-08-17 19:22:09
RubyKansai @rubykansai

j = i したら、同じオブジェクトに j っちゅう名前も付けたことになるんや。[i, j] # => ["Ruby関西", "Ruby関西"] #rubykansai

2011-08-17 19:27:08
RubyKansai @rubykansai

コピーしたんとちゃうで。i も j も同じオブジェクトの名前なんや。[i.object_id, j.object_id] # => [2151892700, 2151892700] #rubykansai

2011-08-17 19:28:50
RubyKansai @rubykansai

オブジェクトをいぢってみたら分かるで。i.upcase!; [i, j] # => ["RUBY関西", "RUBY関西"] #rubykansai

2011-08-17 19:31:42
RubyKansai @rubykansai

j の方も変わってもうたやろ。同じオブジェクトやからな。 #rubykansai

2011-08-17 19:32:22
RubyKansai @rubykansai

upcase に ! が付いてたん覚えてるか。破壊的メソッド言うてレシーバのオブジェクトが変化してもうたんや。ビックリしたなあ。 #rubykansai

2011-08-17 19:34:09
RubyKansai @rubykansai

! の付いてないメソッドは非破壊メソッド言うて、新しいオブジェクトを返すんやで。 #rubykansai

2011-08-17 19:35:31
RubyKansai @rubykansai

こんどは非破壊メソッドの方で小文字にしてみよか。j = i.downcase # => "ruby関西" #rubykansai

2011-08-17 19:38:39
RubyKansai @rubykansai

i の方は大文字のままやで。[i, j] # => ["RUBY関西", "ruby関西"] #rubykansai

2011-08-17 19:40:40