アクセサメソッドの基本

b>アクセサメソッドとは、
インスタンス変数(@nameとか)の読み書きをするためのメソッド。

"attr_accessor"とか"attr_writer"とか"attr_reader"がアクセサメソッド
(attr_writerはセッターメソッド、attr_readerはゲッターメソッドともいう。)

設定の仕方は

attr_accessor :name



中身としては

def name
 @name
end

def name=(value)
 @name = value
end



クラス内で設定した場合の挙動はこんな感じになる。

class User
 attr_accessor :name
end

user = User.new
user.name = "斉藤さん”
user.name
=> "斉藤さん”





class User
 attr_accessor :name
end

class User
 def name
  @name
 end

 def name=(value)
  @name = value
 end
end

と同じで、

user.name = ”斉藤さん”

インスタンスメソッド

def name=(value)
 @name = value
end

を呼び出している。
つまり、valueの部分が ”斉藤さん” なので

user.name = ("斉藤さん")

としてインスタンスメソッドの引数に”斉藤さん”が渡されている。
これでインスタンス変数@nameに”斉藤さん”が代入される。
(つまり、斉藤さんが設定される => セッター)



次に

user.name

では、インスタンスメソッド

def name
 @name
end

が呼び出されている。
先ほど@nameには”斉藤さん”が代入されたため、戻り値は => "斉藤さん"

になっている。
(.nameで@nameの中身を取得できる => ゲッター)


また、アクセサメソッドはinitializeメソッドと一緒に使われるケースが多い。

class User
 attr_accessor :name

 def initialize(name)
  @name = name
 end
end

こうすることで

user = User.new("斉藤さん”)

というように.newメソッドに引数を渡せるようにするためである。
(initializeメソッドは特殊なメソッドで、newメソッドを呼び出すと自動的に呼び出される。)