我是否滥用“救援”进行零检查?

时间:2010-09-17 17:57:54

标签: ruby-on-rails ruby exception-handling

我将rescue用于所有事情,而不只是用于“抢救”例外。我的意思是,我只是喜欢它让我验证并仔细检查数据的方式。

例如,假设我有一个模型Item可能有或没有User。然后,当我想获得我写的项目的所有者名称时:

item.user.name rescue ""

而不是

item.user.nil? ? "" : item.user.name

它也是同样的想法,因为nil.name触发了我用""拯救的异常,但我不确定这是一个好习惯。它制作了我想要的东西,它用更少的代码制作它,但是......我不知道,所有rescue字在这里和那里让我感到不安全。

这是一种不好的做法,还是有效滥用rescue关键字?

4 个答案:

答案 0 :(得分:7)

我认为你有点滥用救援,但在Rails中,有一种针对这些问题的具体方法:tryDocumentation

在您的情况下,item.user.try(:name)可能是更好的方法。

答案 1 :(得分:3)

我想说这并不是一个很好的习惯。我从来没有真正在Ruby中使用过这个功能,因为我觉得我只是隐藏了错误案例。值得注意的是,您正在拯救任何和所有异常,而不指定任何类型的预期错误。它总是看起来像是一些会使调试更难以进行调试的东西,尽管如我所说,我从来没有打扰过自己使用它。

答案 2 :(得分:1)

与大多数其他语言一样,自己进行检查会比使用救援更快。

答案 3 :(得分:1)

作为rescue滥用行为的替代方案,请查看andand gem。它与try发布的其他建议类似,但更好。并且让你说:

item.user.andand.name

如果nilitem.user,则表达式为nil