使用場面
クラス定義内
メリット
ゲッターとセッターをより少ないコードで同時に生成できる
書式
attr_accessor :インスタンス変数名1, :インスタンス変数名2, ...
意味
以下の設定を上の1行で表現できる。
ゲッター
def インスタンス変数名1
@インスタンス変数名1
end
セッター
def インスタンス変数名1=(インスタンス変数名1)
@インスタンス変数名1 = インスタンス変数名1
end
使用例
ゲッターとは何か?セッターとは何か?何が便利なのか?を実際の使用例を交えて説明しようと思う
class Dog
def initialize()
@name = "kurogoro"
end
def say_name
puts "私の名前は#{@name}だ、ワン!"
end
end
dog = Dog.new
dog.say_name
例えば上記のように
1.「Dog」というクラスを設定
2. クラス定義外でDogクラスの新しいインスタンス変数「dog」を生成
3. 「dog」を使って「say_name」というインスタンスメソッドを呼ぶ
という状況を考える。
dogは「kurogoro」という名前を持っているが、このままではクラス定義外で名前を呼び出せない。
そこでクラス定義内でゲッターを設定すると呼び出すことができる。
class Dog
...
def name
@name
end
...
end
dog = Dog.new
puts dog.name
逆に、今はどんなDogの名前も「kurogoro」となってしまうが、セッターを定義することでDogを呼び出した側で名前を任意に設定できるようになる。
class Dog
def name=(name)
@name = name
end
end
dog = Dog.new
dog.name = "shirosaburo"
puts dog.name
まとめ
・ゲッターを定義することでクラス外でインスタンス変数を取り出せる
・セッターを定義することでインスタンス変数に任意の値を設定できる
・attr_accessorを使用することで、ゲッターとセッターのコード量を減らせる