attr_accessor
attr_accessor
の理解に少し時間がかかったため備忘録として書きます。
user.rb
class User
attr_accessor :name
end
上記は省略された書き方で、
user.rb
class User
# セッター
attr_writer :name
# ゲッター
attr_reader :name
end
と書くことができます。
ここでatter_writer
とatter_reader
はそれぞれ「ゲッター」と「セッター」と呼ばれています。
さらに、下のように書くこともできます。
user.rb
class User
# ゲッター
def name=(name)
@name = name
end
# セッター
def name
@name
end
end
まずゲッターは
user.rb
def name=(name)
@name = name
end
となっています。
@
から始まる変数はインスタンス変数と呼ばれ、オブジェクト内でメソッドをまたいで使用できる変数です。
クラスを定義した後に
user.rb
# Userクラスをオブジェクト化
user1 = User.new
# セッターを呼び出して値を代入
user1.name = "Taro"
とすれば、インスタンス変数である@name
にTaro
が代入されます。
次にセッターについて考えます。
user.rb
def name
@name
end
name
というメソッドを定義しており、その中でセッターで定義した@name
を戻り値としています。
なので、クラス定義後に
user.rb
# Userクラスをオブジェクト化
user1 = User.new
# セッターを呼び出して値を代入
user1.name = "Taro"
# ゲッターで返される値を出力
puts user1.name
とすれば、Taro
が出力されます。
つまり、attr_accessor
はゲッターとセッターを1行で使うことができる便利なやつということです。