1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

投稿 123 attr_accessor 2024/10/31

Posted at

本日の勉強時間 3H

attr_accessorは、Rubyのクラスで「属性」を定義するときに使われます。
これにより、インスタンスのプロパティ(値)を簡単に読み書きできるようになります。
例を交えながら、attr_accessorの基本的な使い方を説明します。

  1. attr_accessorがない場合のクラス定義
    例えば、「名前」と「年齢」を持つPersonというクラスを作り、nameとageという2つの属性を持たせたいとします。attr_accessorを使わずに実装すると、次のようになります。
class Person
  # nameとageのインスタンス変数を定義
  def name=(value)
    @name = value
  end

  def name
    @name
  end

  def age=(value)
    @age = value
  end

  def age
    @age
  end
end

# インスタンスを作成
person = Person.new
person.name = '太郎'    # 名前を設定
person.age = 25         # 年齢を設定

puts person.name  #=> 太郎
puts person.age   #=> 25

def name=(value)とdef age=(value)で「値を設定するためのメソッド」を作成しています。
def nameとdef ageで「値を取得するためのメソッド」を作成しています。
@name@ageは、インスタンス変数です。@name@ageはインスタンスごとに異なる値を保持します。
nameとageを設定・取得するためのメソッドを定義しないと、インスタンス変数を外部から直接操作できません。

  1. attr_accessorを使った場合
    上記のような属性設定・取得メソッドを自動で生成するのがattr_accessorです。以下のように書くと、同じ効果が得られます。
class Person
  attr_accessor :name, :age  # nameとageの設定・取得メソッドを自動生成
end

# インスタンスを作成
person = Person.new
person.name = '太郎'    # 名前を設定
person.age = 25         # 年齢を設定

puts person.name  #=> 太郎
puts person.age   #=> 25

説明
attr_accessor :name, :ageと書くことで、nameとageの設定と取得が可能なメソッドが自動で定義されます。
person.name = '太郎'は「nameを設定するメソッド」を呼び出し、person.nameは「nameを取得するメソッド」を呼び出しています。

■attr_accessorのポイント
:nameや:ageはシンボルで、属性の名前を指定しています。

短縮記法:attr_accessorを使うことで、値の設定や取得をシンプルに記述でき
コードが短くなります。

まとめ
attr_accessorは、クラス内のインスタンス変数に対して、簡単に「値を設定」「値を取得」できるメソッドを自動生成するものです。これにより、クラスをシンプルかつ効率的に書くことができます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?