アクセサについて(ruby)

初めに

  • 学習中に学んだことをアウトプットして知識定着を図ると同時に学習効率を上げる目的で書きます。

  • 初学者にもわかりやすいように書いていきます。

アクセサとは?

  • セッターとゲッターの役割を同時に果たすのがaccessor

ゲッターについて。

  • インスタンス変数をクラス内から参照し、引っ張ってくるメソッド。

セッターについて。

具体例

class User
 
  def initialize(name)
    @name = name
  end

 #ゲッター
  def name
   @name
  end
  
 #セッター
 def name=(value)
  @name = value
 end
end

kouhei = User.new('kouhei')
  puts kouhei.name
kouhei.name = 'takashi'
  puts kouhei.name
  • initializeメソッドによりインスタンス生成と同時にinitializeメソッドが働き、'kouhei'という値を受け取り@nameに格納される。

  • ゲッターであるnameメソッドにより@nameに格納された値を外部で取り出して出力するために定義。

  • puts kouhei.nameで出力することによってコンソールでkouheiが出力される。

  • 次に値を更新するためにセッターであるname=(value)を定義する。

  • kouhei.name = 'takashi'とすることでkuheiから値はtakashiにインスタンス変数は更新されている。

  • もう一度puts kouhei.nameを実行することでtakashiが出力される。

3つのアクセサメソッドを利用して簡単に記述。

  • attr_reader(ゲッター)ゲッター部分を省略することができる。nameメソッド

  • attr_writer(セッター)セッター部分を省略できる。name=(value)メソッド

  • attr_accessor(ゲッターとセッター)両方省略できる。

attr_readerを利用したコード

class User
  # attr_accessor:name
   attr_reader:name
  # attr_writer:name
  
  def initialize(name)
    @name = name
  end
  
  #セッター
  def name=(value)
    @name = value
  end
end

kouhei = User.new('kouhei')
  puts kouhei.name
kouhei.name = 'takashi'
  puts kouhei.name

attr_writer(セッター)を利用したコード

class User
  
  attr_writer:name
  
  def initialize(name)
    @name = name
  end

 #ゲッター
  def name
    # @name
    @name
  end
  
 
end

kouhei = User.new('kouhei')
  puts kouhei.name
kouhei.name = 'takashi'
  puts kouhei.name

attr_accessorを利用したコード

class User
  attr_accessor:name
 
  
  def initialize(name)
    @name = name
  end

end

kouhei = User.new('kouhei')
  puts kouhei.name
kouhei.name = 'takashi'
  puts kouhei.name

まとめ

  • ゲッターはクラス内からメソッドを参照するメソッド。

  • セッターはインスタンス変数に値を代入するメソッド。

  • ゲッター、セッターはそれぞれattr_reader、attr_writerに置き換えられる。

  • attr_accessorを利用することでゲッター、セッター両方のメソッドを置き換えられる。