Недавно я читал "Практический объектно-ориентированный дизайн в Ruby", и я заметил, что одной из лучших практик было использование методов доступа, а не прямое захват @instance_variable
. Например:
class Foo
attr_accessor :bar
def initialize(my_argument)
@bar = my_argument
end
# bad
# def lorem_ipsum
# @bar * 999
# end
# good
def lorem_ipsum
bar * 999
end
end
Имеет смысл держать вещи сухими, и в случае, если мне нужно как-то обработать @bar
, прежде чем на самом деле захватить его значение. Однако я заметил, что метод initialize
напрямую задает значение переменной экземпляра @bar
:
class Foo
attr_accessor :bar
def initialize(my_argument)
@bar = my_argument #<-- why isn't self.bar = my_argument used here?
end
Есть ли причина для этого? Не следует ли использовать метод setter вместо прямого использования оператора =
для установки значения переменной экземпляра?