はじめに
プログラミング初心者です。
知識があやふやだったアクセサメソッドについて学習しましたので、備忘録として投稿します。
間違い等ございましたら、ご指摘お願いします。
用語の定義
アクセサメソッド
ゲッターメソッドやセッターメソッドなどインスタンス変数の読み取りや書き込みができるメソッドの総称
ゲッターメソッド
インスタンス変数の読み取り専用のインスタンスメソッドのこと
セッターメソッド
インスタンス変数の書き込み専用のインスタンスメソッドのこと
※メソッド名の末尾に=(イコールをつけると)、代入式のようにメソッドを呼び出すことが出来る
class Car
def initialize
puts "車の色を入力してください"
@color = gets.chomp
end
# ゲッター(読み取り)
def color
@color
end
# セッター(書き込み)
def color = (set)
@color = set
end
end
car = Car.new
# ※initializeメソッドでredと入力したとする
# ゲッターでインスタンスメソッドの値を確認
puts car.color
# => red
# セッターを使用し、インスタンスメソッドの値を書き換える
car.color = "white"
# 再びゲッターでインスタンスメソッドの値を確認
puts car.color
# => white
アクセサメソッドの必要性
クラスの外部からインスタンスの値を変更しようとすると、エラーが発生する
→エラーが発生しないようにするためにはインスタンスメソッドを経由する必要がある
→そこで使用するのがアクセサメソッド
簡単な記述方法
ゲッターとセッターには、簡単に記述する方法がある。
# ゲッター
attr_reader :インスタンス変数名 # シンボル型
attr_reader "インスタンス変数名" # 文字列型
# セッター
attr_writer :インスタンス変数名 # シンボル型
attr_writer "インスタンス変数名" # 文字列型
# ゲッター+セッター
attr_accessor :インスタンス変数名 # シンボル型
attr_accessor "インスタンス変数名" # 文字列型
attr_readerは、ゲッターメソッドを定義してくれるメソッド
attr_writerは、セッターメソッドを定義してくれるメソッド
attr_accessorは、ゲッターメソッドとセッターメソッドの両方を定義してくれるメソッド
まとめ
あやふやだったアクセサメソッドについて、整理できたかなと思います。
実装経験が少ないため、attr_accessorの出番は少ないですが、これから有益な情報を入手しましたら発信して行きたいと考えております!