Edited at

Rubyのアクセスメソッドについて

More than 3 years have passed since last update.


アクセスメソッドを使う理由は?

コードの量を減らすため


アクセスメソッドについて

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)


参考

http://www.rubylife.jp/ini/class/index6.html