Rubyのインスタンス変数(@変数)とは?クラスでデータを保持する基本
Rubyのインスタンス変数は、特定のオブジェクトに属する変数です。
@name
のように、変数名の先頭に @
を付けて表します。
インスタンスごとに異なるデータを保持したいときに使われ、オブジェクト指向プログラミングの基礎となる要素です。
インスタンス変数の基本
class Person
def set_name(name)
@name = name
end
def greet
puts "こんにちは、#{@name}さん!"
end
end
p1 = Person.new
p1.set_name("さくら")
p1.greet # → こんにちは、さくらさん!
この例では、@nameはp1オブジェクトにのみ属する変数で、他のインスタンスとは独立しています。
インスタンス変数のスコープ
- クラス内でのみ使える
- メソッド間で共有される
- 初期化されていない場合は
nil
class Sample
def show
puts @value # 初期化されていない → nil
end
end
s = Sample.new
s.show
initializeメソッドで初期化
initialize
は、インスタンス生成時に自動で呼ばれる特別なメソッドです。
class Animal
def initialize(name)
@name = name
end
def speak
puts "#{@name}が鳴いています"
end
end
cat = Animal.new("ミケ")
cat.speak # → ミケが鳴いています
attr_accessorで簡単にアクセス
インスタンス変数は通常、外部から直接アクセスできませんが、attr_accessor
を使うと読み書き用のメソッドを自動生成できます。
class Book
attr_accessor :title
def initialize(title)
@title = title
end
end
b = Book.new("Ruby入門")
puts b.title # → Ruby入門
b.title = "Rails超入門"
puts b.title # → Rails超入門
attr_reader / attr_writer
メソッド | 機能 |
attr_reader | 読み取り専用(getter) |
attr_writer | 書き込み専用(setter) |
インスタンス変数の使いどころ
- オブジェクトに紐づいたデータの保存
- クラス内部での値の保持
- メソッド間で共有する必要がある情報
まとめ
Rubyのインスタンス変数(@変数)は、オブジェクトごとの状態を保持する重要な仕組みです。
initialize
メソッドでの初期化や、attr_accessor
などを活用することで、効率よくクラスを設計できます。
ローカル変数(メソッド内のみ)と混同せず、オブジェクト単位のデータを管理したいときに使いましょう!