关于如何在方法上处理参数,我有一个一般性问题。假设有一个方法可以接收数字并将其乘以2。
def multiplier(num)
num*2
end
当num为零时会发生什么?谁负责处理错误?方法本身还是调用该方法的人?什么是最佳oop实践?
答案 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