将条件扁平化为重构

Fin*_*las 2 refactoring coderush

考虑:

if (something) {
    // Code...
}
Run Code Online (Sandbox Code Playgroud)

安装CodeRush后,建议:

if (!something) {
    return;
}
// Code...
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下这更好吗?当然,没有任何好处.

Car*_*ter 7

孤立,正如你所呈现的那样 - 没有任何好处.但是mark4o是正确的:它不那么嵌套,如果你看一下就会变得非常清楚,比如一个4级嵌套:

public void foo() {
    if (a)
        if (b)
            if (c)
                if (d)
                    doSomething();
}
Run Code Online (Sandbox Code Playgroud)

public void foo() {
    if (!a)
        return;
    if (!b)
        return;
    if (!c)
        return;
    if (!d)
        return;
    doSomething();
}
Run Code Online (Sandbox Code Playgroud)

这样的早期回报提高了可读性.

  • 在那种情况下,只要支持短路,我就会使用"if a && b && c && d".但是如果在每个if语句中首先是一个或两个命令,那就行不通. (5认同)

And*_*ite 5

在某些情况下,在方法开头验证所有输入更简洁,如果有任何不正确的话,只需挽救.您可以进行一系列单级if检查,在您确信输入良好之前,会连续检查越来越多的具体事项.然后,该方法的其余部分将更容易编写,并且往往具有更少的嵌套条件.