Ruby

[Ruby] attr_accessorメソッドの使い方

使用場面

クラス定義内

メリット

ゲッターとセッターをより少ないコードで同時に生成できる

書式

attr_accessor :インスタンス変数名1, :インスタンス変数名2, ...

意味

以下の設定を上の1行で表現できる。

ゲッター

def インスタンス変数名1
  @インスタンス変数名1
end

セッター

def インスタンス変数名1=(インスタンス変数名1)
  @インスタンス変数名1 = インスタンス変数名1
end

使用例

ゲッターとは何か?セッターとは何か?何が便利なのか?を実際の使用例を交えて説明しようと思う

class Dog
  def initialize()
    @name = "kurogoro"
  end
  def say_name
    puts "私の名前は#{@name}だ、ワン!"
  end
end

dog = Dog.new
dog.say_name

例えば上記のように
1.「Dog」というクラスを設定
2. クラス定義外でDogクラスの新しいインスタンス変数「dog」を生成
3. 「dog」を使って「say_name」というインスタンスメソッドを呼ぶ
という状況を考える。
dogは「kurogoro」という名前を持っているが、このままではクラス定義外で名前を呼び出せない。
そこでクラス定義内でゲッターを設定すると呼び出すことができる。

class Dog
...
  def name
    @name
  end
...
end

dog = Dog.new
puts dog.name

逆に、今はどんなDogの名前も「kurogoro」となってしまうが、セッターを定義することでDogを呼び出した側で名前を任意に設定できるようになる。

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

dog = Dog.new
dog.name = "shirosaburo"
puts dog.name

まとめ

・ゲッターを定義することでクラス外でインスタンス変数を取り出せる
・セッターを定義することでインスタンス変数に任意の値を設定できる
・attr_accessorを使用することで、ゲッターとセッターのコード量を減らせる

ABOUT ME
kurogoro
kurogoro
本業続けながらプログラミングで副業を目指しています。スクールTECH::EXPERTに通って5ヶ月。HTML&CSS、Ruby、rails、javascript、jQueryを学習しつつ、個人アプリ開発、数人での開発の実績あり。プログラミングを学んでいる人や仕事にしている人と繋がりたいです。よろしくお願いします。