在类中使用ruby attr_readers(而不仅仅是使用实例变量)?

时间:2015-10-31 21:50:57

标签: ruby instance-variables accessor

我正在构建一个使用大量小类来进行数据处理的系统(每个类都执行不同的处理步骤,很好,和SRP一样)。我用一些参数初始化每个类,然后在类上调用execute()方法,然后使用其他私有方法进行一些数据计算。

我的问题是:如果我没有访问类之外的任何参数,我应该在私有方法中使用实例变量吗?或者定义一个attr_reader?

例如,这里有一些我捏造的人为代码:

class Car
  attr_reader :make

  def initialize(make, model)
    @make = make
    @model = model
  end

  def execute
    apply_paint
    rotate_tires
  end

  private

  def apply_paint
    if make == "Toyota"
      Painter.paint(self, "red")
    else
      Painter.paint(self, "green")
    end
  end

  def rotate_tires
    if @model == "Sequoia"
      set_tire_size(:large)
    else
      set_tire_size(:normal)
    end
  end
end

哪个更好?我如何处理“制造”或我如何处理“模型”?

如果我知道我根本不使用这个类之外的任何变量,我应该坚持使用实例变量吗?或者使用attr_reader更好,因为我可以将它们转换为实际方法而不更改其余代码...即,apply_paint使用make代替@make,我可以如果需要,请将make更改为本地方法,而不是更改apply_paint方法。

我一直在胡思乱想,无法弄清哪个更好。也许这只是一个偏好的事情,但我想看看别人对这个问题的看法。

1 个答案:

答案 0 :(得分:3)

使用attr_方法。如果你不在课堂外访问它们,你可以(也可能应该)将它们设为私有。为何使用它们?通过说明您应该如何使用它的意图来提高可读性。 attr_reader应解释为"此变量应仅被读取"。