在Ruby中返回nil vs return false

ruk*_*_21 3 ruby ruby-on-rails

所以,我有一个同事的代码有很多return falsereturn true.

例如这种方法:

def has_only_one_uploaded_image?
  return false if images.size > 1
  method_here
end
Run Code Online (Sandbox Code Playgroud)

如果我删除了false作为返回值,如果我从其他条件使用它,它仍然可以工作吗?

喜欢这种方法......

def commission_plan_product_available?
  (has_only_one_uploaded_image? ||
    (has_many_images? && images_are_saved?))
end
Run Code Online (Sandbox Code Playgroud)

我很困惑何时使用正确的boolean返回,何时不应该.

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

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

Nei*_*ter 5

nil是"falsey",如果直接在有条件使用-或组合使用逻辑运算符&&,||等等,将表现一样false,和你想你的,它使用应该工作.

但是,通常更好的做法是从行为类似布尔值的方法返回true或输入false值.很少或没有额外的成本,true并且false与Ruby内部是相同的东西nil(具有固定内容的简单VALUE,它不被解析为指针).

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

如果有疑问,请考虑如何记录该方法.如果你需要解释给用户为什么它返回 truenil和该选项的解释似乎令人费解,那么它就会简单得多做的是预期和返回truefalse

对于极少数方法,它甚至可能有意义返回true,false或者nil- 最后一个基本上是"我不知道".一种方法,用于缓存另一个返回truefalse可能执行此操作的方法的输出.

  • 尼尔提出了很多很好的观点。我想补充一点,“return false”可以让您更轻松地在方法的源代码中看到您的意图。在我看来, ` return false if images.size > 1` 比 `return if images.size > 1` 更容易阅读:其中一个意图似乎是通知操作没有发生,而另一个看起来只是您想要的终止执行。 (2认同)