アクセサメソッドの基本
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メソッドを呼び出すと自動的に呼び出される。)