在Ruby中返回nil vs return false

时间:2015-10-21 12:08:09

标签: ruby-on-rails ruby

所以,我有来自同事的代码有很多return falsereturn true

例如这个方法:

def has_only_one_uploaded_image?
  return false if images.size > 1
  method_here
end

如果我删除false作为返回值,如果我在其他条件下使用它,它是否仍然有效?

像这种方法一样...

def commission_plan_product_available?
  (has_only_one_uploaded_image? ||
    (has_many_images? && images_are_saved?))
end

我很困惑何时使用正确的boolean返回以及何时不应该。

我是Ruby新手(不确定nil是否也可以false条件,请耐心等待。谢谢。

有人可以解决一些问题吗?

1 个答案:

答案 0 :(得分:5)

nil是“假的”,如果直接在条件中使用 - 或者使用逻辑运算符&&||等组合使用,则行为与false相同,你对它的使用应该按你的意愿运作。

但是,通常更好的做法是从行为类似布尔值的方法返回truefalse值。很少或没有额外的成本,truefalse在内部与Ruby一样nil(具有固定内容的简单VALUE,它不被解析为指针)

当你有一个方法可以返回你要求的对象时,有条件地返回nil更有意义,或者出于某种充分的理由“没有”(例如你要求具有特定id的用户,但是那里)不是这样的用户。)

如果有疑问,请考虑如何记录该方法。如果您需要向用户解释为什么它会返回truenil,并且此选择的解释似乎很复杂,那么执行预期的操作会更简单并返回{{1} }或true

对于极少数方法,返回falsetruefalse甚至可能是有意义的 - 最后一个基本上是“我不知道”。缓存来自另一个返回niltrue的方法的输出的方法可能会这样做。