アクセスメソッドを使う理由は?
コードの量を減らすため
アクセスメソッドについて
Rubyのインスタンス変数に続いてRubyのアクセスメソッドについてまとめます。
インスタンスメソッドに値を保存するには
クラスに毎回set,getメソッドを作らないといけないので面倒です。
そのためRubyでは定義されたアクセスメソッドを利用してset,getメソッドの作成を省略できます。
アクセスメソッドは以下の表通りです。
定義式 | 機能 | effect |
---|---|---|
attr_reader :v | 参照が可能 | def v; @v; end |
attr_writer :v | 更新が可能 | def v=(value); @v=value; end |
attr_accessor :v | 参照・更新が可能 | attr_reader :v; attr_writer :v |
set,getメソッドはセットみたいなもんで僕はほとんどattr_accessorしか使ってない感じです。
また複数のインスタンスメソッドを外から使うには
attr_accessor :carname, :location, :age
のように書けます。
コード
次のコードはアクセスメソッドを利用してオブジェクト毎に値を保存して表示するコードの例です。
class Car
attr_accessor :carname
end
mom_car = Car.new
father_car = Car.new
mom_car.carname = 'morning'
father_car.carname = 'lamborghini'
puts mom_car.carname
puts father_car.carname
実行結果
morning
lamborghini
attr_accessorをコメントアウトするとアクセスできないよって言われます。
class Car
# attr_accessor :carname
end
mom_car = Car.new
father_car = Car.new
mom_car.carname = 'morning'
father_car.carname = 'lamborghini'
puts mom_car.carname
puts father_car.carname
実行結果
access_method.rb:8:in `<main>': undefined method `carname=' for #<Car:0x000000011c68e8> (NoMethodError)