チェリー本:アクセスメソッドの省略

インスタンス変数を読み出したり書き込んだりするメソッドを暗黙的に定義してくれる方法がRubyでは用意されている。下記のようにattr_accessorメソッド、attr_readerメソッド、attr_writerメソッドを用いる。 下記のように各アクセスレベルに応じて、アクセスメソッドの定義を省略して、インスタンス変数にアクセスできる。

class User
  attr_accessor :name   # 読み書きするメソッドを暗黙的に定義
  attr_reader   :age    # 読み取り専用のメソッドを暗黙的に定義
  attr_writer   :gender # 書き込み専用メソッドを暗黙的に定義

  def initialize(name, age, gender)
    @name = name
    @age = age
    @gender = gender
  end
end
  user = User.new('Alice', 30, 'female')

  puts user.name
  user.name = 'Elice'
  puts user.name

  puts user.age
#  user.age = 20 #読み取り専用なので、書き込みメソッドは自分で定義しないと、『メソッドがない』というエラーになる
  puts user.age

#  puts user.gender #書き込み専用なので、読み取りメソッドは自分で定義しないと、『メソッドがない』というエラーになる
  user.gender = 'man'
#  puts user.gender #書き込み専用なので、読み取りメソッドは自分で定義しないと、『メソッドがない』というエラーになる