アクセスメソッドを使ってみる

アクセスメソッドとは?

オブジェクトからインスタンス変数にアクセスするためのメソッドのことです。
種類は以下の3つです。

  • attr_reader
  • attr_writer
  • attr_accessor

attr_readerを使ってみる

class SelfIntro
  def initialize(name='名無しさん')
    @name = name
  end
end

self_intro = SelfIntro.new('太郎')
puts self_intro.name

アクセスメソッドattr_readerを使っていないため、エラーが発生します。 f:id:maru877:20170727214931p:plain

class SelfIntro
  def initialize(name='名無しさん')
    @name = name
  end
  # 追記
  attr_reader :name
end

self_intro = SelfIntro.new('太郎')
puts self_intro.name

今回はattr_readerを追記したため、処理が成功します。
f:id:maru877:20170727215311p:plain

attr_writer を使ってみる

class SelfIntro
  def initialize(name='名無しさん')
    @name = name
  end

  attr_reader :name
end

self_intro = SelfIntro.new('太郎')
self_intro.name = 'たろう'
puts self_intro.name

アクセスメソッドattr_writerがないため、インスタンス変数を更新することができません。 f:id:maru877:20170727215735p:plain

class SelfIntro
  def initialize(name='名無しさん')
    @name = name
  end

  attr_reader :name
  # 追記
  attr_writer :name
end

self_intro = SelfIntro.new('太郎')
self_intro.name = 'たろう'
puts self_intro.name

今回はattr_writerを追記したため、処理が成功します。
f:id:maru877:20170727220001p:plain

attr_accessor を使ってみる

class SelfIntro
  def initialize(name='名無しさん')
    @name = name
  end

  attr_accessor :name
end

self_intro = SelfIntro.new('太郎')
self_intro.name = 'たろう'
puts self_intro.name

f:id:maru877:20170727220537p:plain attr_accessorattr_readerattr_writerの両方を有効にすることが出来ます。

これは直接インスタンス変数を操作できるようになったわけではなく、インスタンス変数を操作するメソッドが自動的に追加されているというイメージです。