if-else或提前退货

时间:2016-10-13 01:56:06

标签: if-statement return code-structure

有时候我喜欢使用早期的return语句来阻止if语句的嵌套,我发现它会使代码的可读性降低。

我想知道是否存在任何客观或压倒性的普遍共识,以下两种模式中的哪一种更好的做法?我不认为这是一个主观问题,因为我真正想的是有一个接近客观的偏好。

void func() {
    if (a) {
        do b
    }    
    else {
        do c
    }
}

void func() {
    if (a) {
        do b
        return;
    }

    do c
}

3 个答案:

答案 0 :(得分:1)

坦率地说,我建议第二个。

    1. 第二个更容易理解
    1. 当其他人修改代码时,更容易理解是第一位的。 也许第一个在数学上更清晰,但在人类上却不是。

答案 1 :(得分:0)

我会选择第一个版本。几年前,我对这个问题进行了长时间的解释。

这两个例子,就像你现在写的那样,在功能上是相同的。如果a条件为真,则第一个if条件中的逻辑将执行,函数将返回。但是,仔细看看第二种情况:

void func() {
    if (a) {
        do b
        return;
    }

    do c
}

现在,如果第一个if触发,该函数将返回,否则c将执行。但是,考虑到程序员在某些时候出于某种原因决定重构该方法。如果他要取出return语句,那么如果c为真,则a的逻辑执行。这可能看起来很牵强,但它可能比你想象的更容易发生。另一方面,如果使用完整的if-else,那么即使是if条件的重构也不会导致c逻辑同时进行评估。

答案 2 :(得分:0)

第一个更好。简单地说,它有助于另一个开发人员理解c编译,因为条件是错误的。它还可以防止其他人对您的代码进行破坏性更改。也就是说,它们都是正确的,并且都可以正常工作