本日の勉強時間 3H
attr_accessorは、Rubyのクラスで「属性」を定義するときに使われます。
これにより、インスタンスのプロパティ(値)を簡単に読み書きできるようになります。
例を交えながら、attr_accessorの基本的な使い方を説明します。
- 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を設定・取得するためのメソッドを定義しないと、インスタンス変数を外部から直接操作できません。
- 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は、クラス内のインスタンス変数に対して、簡単に「値を設定」「値を取得」できるメソッドを自動生成するものです。これにより、クラスをシンプルかつ効率的に書くことができます。