rails 技術ブログ

rails 技術ブログ

勉強したことをアウトプットしていきます

【Ruby】ゲッター/セッターとは

ゲッター

通常、インスタンス変数はクラス内でないと参照できない。
クラス外でも参照したい時に使うのがゲッターメソッド。

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

  def getName #「ゲッター」メソッド
    @name
  end
end

dog = Dog.new('チワワ') 

#ゲッターメソッドを定義することで、クラスの外でも@nameを取得できる
p dog.getName #=> 'チワワ'
セッター

クラス外でインスタンス変数の値を変更したい時に使うのがセッターメソッド。

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

  def setName=(name) #「セッター」メソッド
    @name = name
  end
end

dog = Dog.new('チワワ') 
#セッターメソッドを定義することで、クラスの外でも@nameを変更できる
dog.setName = 'トイプードル'
p dog.getName #=> 'トイプードル'


便利なアクセサメソッド
def setName=(name)
  @name = name
end

Rubyにはわざわざこのようにゲッター/セッターを定義しなくても、1行追加するだけで可能にしてくれるメソッドがある。
それがアクセサメソッド。

メソッド名 役割
attr_reader: ゲッターと同じく、クラスの外で参照できるようにする
attr_writer: セッターっと同じく、クラスの外で変更できるようにする
attr_accessor: ゲッター/セッター両方の機能をもつ
(クラスの外で参照・更新ができる)


アクセサメソッドの使い方
class Dog
  attr_accessor :name

  def initialize(name)
    @name = name
  end

end

dog = Dog.new('チワワ') 
dog.name = 'トイプードル' # attr_accessorが追加されているので、そのままnameを参照できる
p dog.name #=> 'トイプードル' # attr_accessorが追加されているので、そのままnameを呼び出せる




■参考にした記事

【Ruby】「ゲッター」と「セッター」を理解する - Qiita