为什么在“如果x然后返回”之后很少使用“else”?

此方法:

boolean containsSmiley(String s) {
    if (s == null) {
        return false;
    }
    else {
        return s.contains(":)");
    }
}

可以等价地写成:

boolean containsSmiley(String s) {
    if (s == null) {
        return false;
    }

    return s.contains(":)");
}

根据我的经验,第二种形式更常见,特别是在更复杂的方法中(可能有几个这样的退出点),“投掷”和“返回”也是如此。然而,第一种形式可以说使代码的条件结构更加明确。有什么理由偏爱其中之一吗?

(相关:一个函数应该只有一个 return 语句吗?)


答案 1

在这种情况下,这将是多余的,并且会为函数的主代码创建不必要的额外缩进。else


答案 2

根据我的经验,这取决于代码。如果我在“防范”某事,我会做的:

if (inputVar.isBad()) {
    return;
}

doThings();

重点很清楚:如果该语句为假,我不希望该函数继续。

另一方面,有一些函数具有多个选项,在这种情况下,我会这样写:

if (inputVar == thingOne) {
    doFirstThing();
} else if (inputVar == secondThing) {
    doSecondThing();
} else {
    doThirdThing();
}

即使它可以写成:

if (inputVar == thingOne) {
    doFirstThing();
    return;
}
if (inputVar == thingTwo) {
    doSecondThing();
    return;
}
doThingThree();
return;

它实际上归结为哪种方式最清楚地显示了代码正在做什么(不一定是哪一段代码最短或缩进最少)。