【问题标题】:Ruby: Return if method returns a non-nil valueRuby:如果方法返回非零值,则返回
【发布时间】:2015-07-11 06:45:29
【问题描述】:

在 Ruby 中是否有更好/更清洁的方法来做到这一点?

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

我在其他地方打电话给#validate,所以为了保持干燥,我让它返回错误消息。

【问题讨论】:

  • validate(x, y) 是否返回 Boolean
  • 通常错误(如异常)会停止进程。他们是您想要避免这种情况的特殊原因吗?例如,当您运行 my_method 时,您是否会在继续之前检查是否返回了错误对象?否则,您可以引发错误而不是返回错误

标签: ruby refactoring guard-clause


【解决方案1】:

这个更明确、更易读的版本有什么问题?

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

  if error
    error
  else
    # do something else
  end
end

IMO 编写尽可能短的代码没有任何好处。您应该始终致力于编写最易读和易于理解的代码。

【讨论】:

    【解决方案2】:

    如果validate在输入错误时返回错误,否则nil,那么你可以这样做:

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

    【讨论】:

      【解决方案3】:

      写同样的事情的另一种方式是:

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

      这将返回答案以验证它是否返回任何内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-30
        • 1970-01-01
        • 1970-01-01
        • 2019-02-15
        • 1970-01-01
        • 2018-12-19
        • 2010-10-23
        相关资源
        最近更新 更多