if-else or early return

2019-07-16 19:00发布

Sometimes I like to use early return statements to prevent nesting if statement, which I find makes for less readable code.

I am wondering if there is any objective or overwhelming general consensus as two which of the following patterns is better practice? I don't think this is a subjective question, since what I am really asking is there a near objective preference.

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

or

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

    do c
}

3条回答
一纸荒年 Trace。
2楼-- · 2019-07-16 19:21

I would opt for the first version. I was actually given a lengthy explanation several years ago regarding this.

The two examples, as your wrote them now, are functionally identical. If the a condition be true, then the logic in the first if condition will execute, and the function will return. However, have a closer look at the second scenario:

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

    do c
}

Right now, should the first if fire, the function would return, otherwise c would execute. However, consider that at some point down the line a programmer decides to refactor the method for some reason. If he were to take out the return statement, then the logic for c would also execute if a were true. This may seem far-fetched, but it could happen more easily than you might think. On the other hand, if you use a full if-else, then even a refactor of the if condition would never result in the c logic evaluating at the same time.

查看更多
虎瘦雄心在
3楼-- · 2019-07-16 19:24

Frankly, I recommend the second one.

    1. The second is more clear to understand
    1. When some else modify the code more easy to understand is the first place. Maybe the first is more clear in math but not in human being.
查看更多
淡お忘
4楼-- · 2019-07-16 19:38

The first is better. Simply put,it helps another developer to understand that c compiles because the condition is false. It also prevents other people from making damaging changes to your code. That said,they are both correct and would both work just fine

查看更多
登录 后发表回答