if-else 或早期 return

if-else or early return

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

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

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

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

    do c
}

我会选择第一个版本。几年前,我实际上就此得到了冗长的解释。

正如您现在所写的,这两个示例在功能上是相同的。如果 a 条件为真,则第一个 if 条件中的逻辑将执行,函数将 return。然而,仔细看看第二种情况:

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

    do c
}

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

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

老实说,我推荐第二个

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