任何人都可以向我解释if
和unless
之间的区别以及何时使用它?
答案 0 :(得分:62)
unless
只是一个否定的if
。也就是说,如果条件不为真,它会执行它包含的任何内容。
unless foo?
# blabla
end
简单地说就是
if !foo?
# blabla
end
这一切都是你发现更容易阅读的问题。
答案 1 :(得分:9)
当有一个参数时,使用'除非'对我来说很简单,但是当有几个参数时我觉得它很混乱。使用||
代替&&
时。
“除非这个或那个”对我的大脑来说更难。 “如果不是这样而不是那个”更容易。
如果我使用它,将来很难维护这段代码。所以我没有。
答案 2 :(得分:5)
unless
只相当于if not
。当您使用时,这是个人偏好。
答案 3 :(得分:2)
if
和unless
之间的区别在于它们彼此完全相反:
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?
。