Ruby:returnif方法返回非nil值

Ruby:returnif方法返回非nil值,ruby,refactoring,guard-clause,Ruby,Refactoring,Guard Clause,在Ruby中有更好/更干净的方法吗 def my_method(x, y) return error if (error = validate(x, y)) # do something else end 我在别处调用了#validate,因此为了保持干燥,我让它返回错误消息。编写相同内容的另一种方法是: def my_method(x, y) unless validate(x, y) # do something else end end 如

在Ruby中有更好/更干净的方法吗

def my_method(x, y)
  return error if (error = validate(x, y))
  # do something else
end

我在别处调用了
#validate
,因此为了保持干燥,我让它返回错误消息。

编写相同内容的另一种方法是:

 def my_method(x, y)
    unless validate(x, y)
        # do something else
    end
  end

如果返回任何内容,将返回验证答案。

如果
validate
在输入错误时返回错误,
nil
否则,您可以执行以下操作:

def my_method(x, y)
  validate(x, y) or # do something else
end

这个更明确、更可读的版本有什么错

def my_method(x, y)
  error = validate(x, y)

  if error
    error
  else
    # do something else
  end
end

在国际海事组织,编写尽可能短的代码没有任何好处。您应该始终以编写可读性和可理解性最高的代码为目标。

验证(x,y)
返回
布尔值
?通常错误(如异常)会停止该过程。他们是你想要避免的一个特殊原因吗?例如,当您运行my_方法时,是否在继续之前检查是否返回了错误对象?否则,您可以引发错误,而不是返回错误