差异 - 除非/如果

时间:2011-01-26 15:39:12

标签: ruby

任何人都可以向我解释ifunless之间的区别以及何时使用它?

5 个答案:

答案 0 :(得分:62)

unless只是一个否定的if。也就是说,如果条件为真,它会执行它包含的任何内容。

unless foo?
    # blabla
end

简单地说就是

if !foo?
    # blabla
end

这一切都是你发现更容易阅读的问题。

另请参阅:Unless, The Abused Ruby Conditional

答案 1 :(得分:9)

当有一个参数时,使用'除非'对我来说很简单,但是当有几个参数时我觉得它很混乱。使用||代替&&时。

“除非这个或那个”对我的大脑来说更难。 “如果不是这样而不是那个”更容易。

如果我使用它,将来很难维护这段代码。所以我没有。

答案 2 :(得分:5)

unless只相当于if not。当您使用时,这是个人偏好。

答案 3 :(得分:2)

ifunless之间的区别在于它们彼此完全相反:

  • if接受一个条件,一个then-block和一个可选的else-block,如果条件是真的,它会评估then-block,否则它会评估else-block
  • unless接受一个条件,一个then-block和一个可选的else-block,如果条件是假的,它会计算then-block,否则它会计算else-block

或者换句话说:它们在Ruby中与在英语中的含义完全相同。

答案 4 :(得分:-1)

作为红宝石开发者,它最好遵循最佳实践来保持代码的可读性。我的答案与该问题没有直接关系,但可能会对某人有所帮助,请尝试尽可能使用if而不是unless例如,使用{{1 }},而不是unless comments.empty?尝试使用if comments.present?unless comments.present?同时检查if comments.blank?blank?