【问题标题】:How to use if-else statement with function returns? [closed]如何使用带有函数返回的 if-else 语句? [关闭]
【发布时间】:2015-12-20 09:49:37
【问题描述】:

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

他们引导我将代码放入长花括号中。当每个条件中的代码量变大时,代码变得难以遵循。

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;
}

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

【问题讨论】:

  • 您的问题难以阅读。我们不需要这么多的垂直空白。我们中的一些人在移动设备上阅读 SO。
  • 每一个用于不同的目的。您的代码发生了行为变化。他们不一样来决定哪个是最佳实践。
  • 我是老派,我被教导每个函数/方法都应该有一个入口和出口点,为此,首选第一个。在if-else if 块中添加return 语句可能意味着人们可能会错过它们,并且突然之间人们不知道发生了什么。最后一个可能使您难以理解您试图实现的关系和逻辑(恕我直言)。如果您的 if-else 块运行时间很长,请考虑补充方法 if (condition1) { doSomethingImportant(); } 的功能
  • @AndyTurner 我正在更新它
  • 用多态替换条件逻辑,请阅读this

标签: java coding-style conditional


【解决方案1】:

如果条件是一些快速案例或先决条件,我更喜欢立即使用 returnthrow 而没有 else 语句。例如:

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

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

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

【讨论】:

    【解决方案2】:

    一般情况:

    • 如果两个结果相同,则完全取决于阅读代码的人。

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

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


    Oracle Java Code Conventions 7.4 没有提到 if 语句中的 return,而是关于 if-else 语句

    7.4 if、if-else、if else-if else 语句

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

    if (condition) {
        statements;
    }
    

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

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

    因此,根据ORACLE CONVENTIONS,您必须使用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 函数中返回,但实际上你并没有返回任何东西。
    • 嗯……我虽然 IDE 会抱怨……同意……已更正,谢谢!
    • 支持常见案例。
    【解决方案3】:

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

    没有“更好”。有人告诉您您的很难阅读,而您显然发现您的更容易阅读,这一事实证明了这完全是主观的。

    你应该以对你来说更容易的方式去做。

    【讨论】:

    • 但是团队合作的时候呢?
    • 团队应该足够灵活,以接受来自每个开发人员自己偏好的编码风格的微小变化,而不是要求每个人都绝对一致。人们真的应该放松一下。
    • 现在,如果您的工作场所将自己视为盖世太保,那么显然,您必须遵守他们的意愿。很有可能,在寻找不同的工作时。
    • 赞了您的最后一条评论。 :-)
    【解决方案4】:

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

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

    像这样,我觉得读起来容易一些。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      相关资源
      最近更新 更多