在Ruby中返回nil的惯用方法

det*_*zed 1 ruby null return idiomatic

Ruby中的惯用语是不是明确地返回nil?我们这样说:

def find_something data
    if data.has_what_we_need?
        a = data.something
        if a.has_what_we_want?
            a.the_stuff[42]
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

与这样的事情(可以说是吵闹的)相反:

def find_something data
    if data.has_what_we_need?
        a = data.something
        if a.has_what_we_want?
            a.the_stuff[42]
        else
            nil
        end
    else
        nil
    end
end
Run Code Online (Sandbox Code Playgroud)

tad*_*man 6

如果条件不满足,我会尝试创建提前纾困的方法,在缩进方面压扁代码:

def find_something data
  return unless data.has_what_we_need?

  a = data.something

  return unless a.has_what_we_want?

  a.the_stuff[42]
end
Run Code Online (Sandbox Code Playgroud)

这有两个明确定义的退出点,return在阅读它时应该显示为一个相当明显的东西.return没有参数的A 将返回nil给调用者.

如果你不关心nilvs. false你可以更加浓缩这个:

def find_something data
  return unless data.has_what_we_need?

  a = data.something

  a.has_what_we_want? and a.the_stuff[42]
end
Run Code Online (Sandbox Code Playgroud)