Ruby方法和参数验证

时间:2019-03-07 09:40:22

标签: ruby-on-rails oop

关于如何在方法上处理参数,我有一个一般性问题。假设有一个方法可以接收数字并将其乘以2。

def multiplier(num)
  num*2
end

当num为零时会发生什么?谁负责处理错误?方法本身还是调用该方法的人?什么是最佳oop实践?

2 个答案:

答案 0 :(得分:1)

这与OOP毫无关系,因为它也适用于其他范例。也就是说,关于这个问题有不同的思想流派。哪个是“最佳”,取决于您正在与谁交谈。

一个是“无处不在的防御性编程”。这意味着每种方法都要对其输入进行严格检查。

另一个是“呼叫者负责提供正确的数据”。

另一个就是我所说的“安全范围”:只有当我们处理外部输入时,才进行严格的检查,但是一旦数据处于“系统内部”,就可以信任它。

以及两者之间的任何内容。

答案 1 :(得分:0)

我同意其他答案(@ sergio-tulentsev,@Зелёный)。还有另一件事要考虑。

在很多情况下,不要指望某个特定类型的对象,而要像一个特定类型的对象一样,这是一个好习惯。我的意思是,在您的情况下,该方法不仅可以期望将数字作为参数传递,而且还可以期望将任何对象视为数字。这不仅可以使您的方法更强大,而且可以解决nil问题。当然,这取决于您的需求。

我正在谈论的方法版本可能看起来像这样:

def multiplier(num)
  # trying to convert whatever is passed to a number
  num.to_f * 2
end

对于nil,它将返回0.0