ゲッターとセッターの仕事は、あなたがあなたのコンストラクタで定義するインスタンス変数の読み取りと書き込みの迅速な実装を提供することである。
class Player
attr_accessor :name, :position
def initialize(position, name)
@position = position
@name = name
end
end
ユーザーはattr_reader
(ゲッタ用)とattr_writer
(セッタ用)も指定できます。上記のコード
:#name
、#position
、#name=
を、そしてPlayer
クラスのインスタンスの#position=
方法:attr_accessor :name, :position
はあなたが与えます。
しかし、getters/setterの検証やカスタマイズされたロジックは提供しません。例えば
:あなたはプレイヤーのフルネームを表示したい場合があります。また、ゲッターを書いて、自分をセッターする必要があると思い、このような場合には、0または負の位置を受け入れるようにあなたのコードを望んでいない:
class Player
def initialize(first_name, last_name, position)
@first_name = first_name
@last_name = last_name
@position = position
end
# validation for updating position using setter of position
def position=(new_position)
raise "invalid position: #{new_position}" if new_position <= 0
@position = new_position
end
# customized getter for name method
def name
"#{@first_name} #{@last_name}"
end
end
上記のようにカスタマイズする必要がない場合は、これらの変数にattr_*
メソッドを使用する方が理にかなっています。
あなたの例はすべてsetter *に関するものですが、あなたの "基本的な"要約では* getters *に関する話があります。それはタイプミスか意図的なのでしょうか? –