ゲッターとセッターの解説記事は何個かあるので、そこはお任せするとして、
あと、アクセサという便利なコードもありますが、使い分けについて書かれてる物がすくなかったので、初学者編の基礎として振り返ろうと思って書きました。
まずはよくある車を設計する所です。
アクセサを使える場合
車の設計
class Car
attr_accessor :model, :color, :option
def initialize(model, color, option)
@model = model
@color = color
@option = option
end
end
car = Car.new("Benz", "white", "ホイール")
#=> すべて変更可能
これだったら、attr_accessor
でまとめてしまっても良いのですが、
例えば 「もう車作ってるのに、車種と色変えられたら困るよ!!!(オプションだけだったらいいけど・・・)」 という場合の書き方は、
ゲッターとセッターを使う場合
車の設計
class Car
attr_reader :model, :color, :option
attr_writer :option
def initialize(model, color, option)
@model = model
@color = color
@option = option
end
end
car = Car.new("Benz", "white", "ホイール")
#=>オプションだけ変更可能
っていう書き方が普通になりますけど、
アクセサを使って更にスマートに書くのであれば、
アクセサとゲッターを使うのがスマート
車の設計
class Car
attr_accessor :option
attr_reader :model, :color
def initialize(model, color, option)
@model = model
@color = color
@option = option
end
end
car = Car.new("Benz", "white", "ホイール")
#=>オプションだけ変更可能
になります。
ちなみに、
車の車種を変更しようとすると・・・
車の設計
class Car
attr_accessor :option
attr_reader :model, :color
def initialize(model, color, option)
@model = model
@color = color
@option = option
end
end
car = Car.new("Benz", "white", "ホイール")
car.model = "BMW"
#=>NoMethodError (undefined method `model=' for #<Car:0x00007fc009900440>)
という風に怒られます!!「車種変えるんじゃねぇよ!もう作ってるんだよ!」という事ですね。色を変えようとしても同じようなエラーになります。
まとめ
という事で、Ruby初学者が勉強するゲッター、セッター、アクセサの使い分けについて振り返っていきました。
初学者の方の参考になれば幸いです。ありがとうございました!!