はじめに
※以下の内容には誤りが含まれる可能性があります
Rubyには使える変数が4種類あります。なかでもローカル変数とインスタンス変数の違いが重要です。
参照範囲が違うんですね
具体的な内容
・ローカル変数
変数名が小文字または`_'で始まる変数。
ブロック内またはメソッド定義内でしか参照されない。
ローカル変数
class Human
name = “太郎”
def myName
puts name
end
end
human = Human.new
human.myName
・インスタンス変数
変数名が@で始まる変数。
newメソッドで作成したオブジェクトの中に限り、どこからでも参照
できる。通常オブジェクトの外からは参照されない。
インスタンス変数
class Human
def initialize(name)
@name = name
end
def myName
puts "私の名前は#{@name}です。"
end
end
human1 = Human.new("太郎")
human1.myName #"私の名前は太郎です。"
human2 = Human.new("二郎")
human2.myName #"私の名前は二郎です。"
変数のスコープとは
スコープとは変数の有効な範囲のこと。
その変数がスコープの外に出てしまえば参照できず、
たとえ名前が同じでも違う変数として扱われる。
まとめ
変数の種類 | 特徴 |
---|---|
インスタンス変数 | 同一クラス内のメソッドであればどこでも使用できる。インスタンス変数はインスタンスごとに値が異なる。 |
ローカル変数 | 変数の有効な範囲(変数のスコープ)が局所的(ローカル)で、有効な範囲を越えていれば同じ名前の変数でも違う変数として扱われる。 |
最後に
なぜインスタンス変数が存在するのか。
メソッドの中だけであればローカル変数で十分ですが、
オブジェクトが複数あった場合、ローカル変数では足りないからです。