アクセサメソッド
インスタンス変数の値を読み書きするメソッドのこと。
インスタンスメソッド
メソッドは実行する一連の処理をまとめたもの。
ただし、通常のメソッドがプログラム中からいつでも呼び出せるのに対してクラス内に記述されたメソッドはクラスから作成されたオブジェクトしか呼び出すことが出来ない。このようなメソッドをインスタンスメソッドと呼ぶ(Let'sプログラミングより参照)
Car.new
の.new
はインスタンス変数ではない。クラスに対して実行するものなので、クラスメソッドと呼ばれる。
class Car
def initialize(name)
@name = name
end
def hello
puts "Hello! I am #{@name}."
end
def name
@name
end
def name=(value)
@name = value
end
end
car = Car.new('Kitt')
puts car.name
car.name = 'hogehoge'
puts car.name
car.name = 'gehogeho'
puts car.name
インスタンス変数は外部からは書き換えられるようにできていないが、アクセッサーメソッドはそれをできるようにするもの。(だと今の所認識している)
上記を実行すると、
Kitt hogehoge gehogeho
と出力される。
def name=(value)
@name = value
end
とすることで、のちに@nameを外部から変更することができる。
アクセッサーメソッド
def name
@name
end
def name=(value)
@name = value
end
ここではname
やname=
がアクセッサーメソッド。
attr_accessor
class Car
の下に
attr_accessor :name
と書き加えることで
def name
@name
end
def name=(value)
@name = value
end
を省略できる。(attr_accessorはアクセッサーメソッドではない。アクセッサーメソッドを定義してくれるメソッドである)
こっちの方が楽。
class Car
attr_accessor :name
#attr_reader :name
#attr_writer :name
def initialize(name)
@name = name
end
def hello
puts "Hello! I am #{@name}."
end
# def name
# @name
# end
# def name=(value)
# @name = value
# end
end
car = Car.new('Kitt')
puts car.name
car.name = 'hogehoge'
puts car.name
car.name = 'gehogeho'
puts car.name
他にも
attr_reader :〇〇
← 読む専門
attr_writer :〇〇
← 書く専門
といったものもある。