什么是使用后缀的目的"如果" Ruby中的语句?

时间:2015-07-06 00:34:32

标签: ruby

我知道Ruby支持后缀if,如:

number = -42 if opposite

但是这个的目的是什么?为什么要用它来代替前缀if语句?

5 个答案:

答案 0 :(得分:6)

后缀式ifunless也适用于“后卫条款”,其形式为:

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)

它与前缀相同但更短。唯一的原因是在文本编辑器中保存垂直空间。