【问题标题】:Using multiple if statements instead of else if when each statement return something [closed]当每个语句返回某些内容时,使用多个 if 语句而不是 else if [关闭]
【发布时间】:2019-10-03 18:14:39
【问题描述】:

我写了一段看起来像这样的代码。

public boolean check(String i){
        if(i.isEmpty()){
            doSomething();
            return true;
        }
        else if(i.equals("something")){
            doSomethingElse();
            return true;
        }   
        return false;
    }

在代码审查期间,我收到了一条删除“else if”块的评论,因为第一个“if”块有一个返回语句,这使得另一个块无法访问。

所以我很好奇当每个块返回某些东西时,使用多个“if”语句是否比“else if”有任何优势。 是否通过使用多个 if 语句而不是“else if”来提高代码性能或可读性?在这种情况下,为什么首选多个“if”而不是“else if”? 我知道它们在功能方面是相同的。

【问题讨论】:

  • 很难回答您的问题,因为前提不正确。 else-if 是绝对可以达到的。这里是否可能缺少一些可能使之成为现实的上下文?
  • 可读性问题本质上是基于意见的。就个人而言,我会在没有elses 的情况下写这个,但更多的是出于习惯而不是任何特定的信念,即它“更好”。 (当然没有性能差异)
  • 我把这个概念称为“平面代码”,这里只是松散地适用。基本上,与 嵌套 if 语句不同,您偶尔可以提取条件,以便 if 语句立即返回。不过,在这种情况下,唯一删除的代码是 else,所以这并不是一个真正的主要问题。
  • @Gary 我提供的代码中没有任何遗漏。字符串可能有也可能没有任何价值。
  • 这个问题是基于意见的。但我会尽量避免在一种方法中多次返回

标签: java performance if-statement readability


【解决方案1】:

我认为您需要与代码审查员交谈。如果'if'语句返回false,我很确定else if是可以访问的

【讨论】:

  • 是的,我知道代码是可以访问的,因为我已经为它编写了 JUnit。我的问题是在上述情况下if 是否比else if 更受欢迎?有性能差异吗?我已经向代码审阅者提出了同样的问题,但几天后我无法从审阅者那里得到答案。谢谢
  • 了解@Riza。对于您的问题,我认为没有太大的性能差异。在这种情况下,我个人确实使用“else if”,这只是一种习惯。因为它正在检查相同的字符串引用。但无论哪种方式都可以,两者都是可读的。顺便说一句,你需要在 i.isEmpty() 检查之前检查“null == i”吗?只是防止 NPE。
【解决方案2】:

在您的代码中 else if(i.equals("something")){ 不是无法访问的代码。当输入为非空值时,它将执行 else if 块并且输入值等于“某物”,然后执行 else if 块中的语句。

根据业务场景,我们需要使用 if elseIf 。如果我们只使用 if 语句,那么每个 if 条件都会被评估。执行评估需要一些时间。

如果我们知道我们需要在 true case 和 false case 中执行一些操作,那么最好使用 if elseif ..

【讨论】:

    【解决方案3】:

    这与可到达或不可到达有关。如果 is 不为空,则将到达 else。

    我认为一旦它进入第一个 if 流将返回,那么 else 就没有意义了。换句话说, else 不会添加任何东西,因此它是噪音。有些人更喜欢拥有其他东西。我个人认为没有 else 代码更容易理解。

    【讨论】:

    • mrossini 是对的,否则只是增加噪音。简单看一下代码,else 意味着控制可以继续通过第一个 if 语句而不执行 doSomtehing()
    • 不,else 不仅仅是噪音。如果条件是 elseif-!empty,那将是,但事实并非如此。只有当等式为真时才会发生。
    • @gary 完全是噪音。如果条件不为真,它会转到下一个如果无论如何,不​​管 else 是否存在,因此它是不需要的,因此它是噪音。 "elseif-!empty" 根据定义是 "isEmpty" 的 else 子句.....
    • 哦,你的意思只是“else if”中的“else”。我以为你把整个第二个条件称为噪音。
    • @greg 不是整个 else 块,只是 "else" 关键字 :) 很像这样:refactoring.com/catalog/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 2021-08-31
    • 1970-01-01
    • 2013-09-09
    • 2017-09-05
    相关资源
    最近更新 更多