我知道Ruby支持后缀if
,如:
number = -42 if opposite
但是这个的目的是什么?为什么要用它来代替前缀if
语句?
答案 0 :(得分:6)
后缀式if
和unless
也适用于“后卫条款”,其形式为:
return if ...
return unless ...
以下是一个例子:
# suffix-style
def save
return false if invalid?
# go for it
true
end
对战:
# indented style
def save
if valid?
# go for it
true
else
false
end
end
在第二个示例中,由于valid?
检查,方法的整个实现必须转移一个缩进,我们需要一个额外的else
子句。使用后缀样式,invalid?
检查被视为我们处理然后拯救的边缘情况,并且该方法的其余部分不需要缩进或else
子句。
这有时被称为“保护条款”,并且是Ruby样式指南的recommended。
答案 1 :(得分:3)
在某些情况下,它可以使代码更容易阅读。我发现这是真的,特别是在unless
的情况下,你有通常想要执行的某些操作:
number = -42 unless some_unusual_circumstance_holds
对于unless
,对于对称性,支持if
也是有意义的。
答案 2 :(得分:3)
number = -42 if opposite
与
相同if opposite
number = -42
end
出于可读性原因,有些人更喜欢单线程。想象一下这样的一行:
process_payment if order_fulfilled?
看起来不是很好吗?
答案 3 :(得分:2)
Postfix样式没有else
部分。当你只想用两种情况中的一种除以条件并且不想混淆另一种情况时,它是有用的。
答案 4 :(得分:1)
它与前缀相同但更短。唯一的原因是在文本编辑器中保存垂直空间。