如何在函数 returns 中使用 if-else 语句?

How to use if-else statement with function returns?

我总是尽量避免嵌套语句。

他们引导我将代码放入长花括号中。当每个条件中的代码量变大时,就很难跟上代码了。

if(condtion) {

} else if(condition2) {

} else {

}

所以如果我有这样的代码:

void doSomething(){  
    if(condtion) {
        return;
    } else if(condition2) {
        return;
    } else {
        return;
    }    
}

我总是将其更改为这种形式(我避免了 else,因为每个条件都有一个 return 语句):

void doSomething() {
    if(condtion) {
        return;
    }    
    if(condition2) {
        return;    
    }
    return;
}

但是有人说我的有点难读,哪个更好?

常见案例:

  • 如果两个结果相同,则全靠阅读代码的人。

  • 当方法开始做比检查简单条件更复杂的事情时,它应该只有一个 return 语句。

  • 如果方法的逻辑真的很复杂,你必须创建各种方法来阐明。


Oracle Java Code Conventions 7.4 没有在 if 语句中提及 return,而是在 if-else 语句中提及

7.4 if,if-else,if else-if else语句

语句的 if-else class 应具有以下形式:

if (condition) {
    statements;
}

if (condition) {
    statements;
} else {
    statements;
}

if (condition) {
    statements;
} else if (condition) {
    statements;
} else {
    statements;
}

因此,根据 ORACLE 约定,您必须使用 if-if else-else,但您可以选择:

一个return语句

boolean doSomething(){  
    boolean var;
    if(condtion){
        var = false;
    }else if(condition2){
        var = true;
    }else{
        var = false;
    }    
    return var;
}

或 3 returns 个语句。

boolean doSomething(){  
    if(condtion){
        return;
    }else if(condition2){
        return;
    }else{
        return;
    }    
}

如果每个条件的代码量变大,我会做:

void doSomething()
{
    if (condtion)
    {
        function1();
    }
    else if (condition2)
    {
        function2();
    }
    else
    {
        function3();
    }
}

像这样,我觉得比较好读

如果条件是一些快速案例或先决条件,我更喜欢没有 else 语句的直接 returnthrow。例如:

void processArray(int[] array) {
    if(array == null || array.length == 0) {
        System.out.println("Empty input");
        return;
    }
    // do some complex computations
}

这样,您方法的其余部分(主要课程)就没有额外的缩进,末尾也没有额外的大括号,这可能远低于 else 语句。

如果条件分支很长并且长度大致相同,那么代码无论如何都会有味道。您需要重构它,将分支提取到方法或(有时更好)使用 Command pattern.

之类的方法来分离 类

But someone told me mine is a bit hard to read, which one is better?

没有"better"。有人告诉你你的很难读,而显然你发现你的更容易阅读,这一事实证明这完全是主观的。

你应该按照对你来说更容易的方式来做。