【问题标题】:Java best style for return statement - inside or outside if condition? [closed]返回语句的Java最佳样式-内部或外部if条件? [关闭]
【发布时间】:2014-11-18 03:10:38
【问题描述】:

有没有更好的方法来编写下面的代码?我正在检查一个对象是否为空,如果是则返回 false,否则我检查另一个变量并根据它选择要做什么。

private boolean myFunction(MyObjectType myObject) {
  if (myObject == null) {
    return false;
  } else if (myInstanceVariable.myMethod()) {
    // Do something then return
    System.out.println(myObject.getSomeValue());
    return true;
  } else {
    return false;
  }
}

最好有最后的 else 语句,还是将 return false(以及我可能放在最后 else { } 块中的任何其他代码)移到 if 语句之外?我可以看到将它移到外面更安全(并且代码行更少),因此该函数可以 100% 保证返回。是否取决于编译器的行为方式?

private boolean myFunction(MyObjectType myObject) {
  if (myObject == null) {
    ...
  } else if (myVariable.myMethod()) {
    ...
  }
  return false;
}

【问题讨论】:

  • codereview.stackexchange.com 是提出此类问题的更好场所
  • 请注意,像 Eclipse 或 Netbeans 这样的 IDE 将不允许您编写不能保证返回所需类型的代码。他们很聪明,可以判断你的 if/else 链是否总是返回结果。

标签: java if-statement coding-style refactoring return


【解决方案1】:

最好将最后一个 return 语句放在任何 if 语句之外。 最后我记得,如果你所有的返回值都在 if 语句中,你会得到一个编译错误,说明该方法没有返回值,或者可能并不总是能达到返回值。

【讨论】:

  • 你能解释一下为什么它更好吗?
  • “如果你所有的返回都在 if 语句中,你会得到一个编译错误”实际上不是一个真实的语句。如果代码无法到达这些返回语句,您只会看到错误。此外,单个 return 语句“更好”的原因在于,具有单个退出点的方法对读者来说本质上比具有多个退出点的方法更清晰。然而,在实践中,具有多个退出点的简短方法很容易理解。
  • @Jesper 我认为这取决于情况。例如,我永远不会在仅包含 if 语句等的方法中有多个退出点,我会让它返回一个变量,变量的值由 if 语句的结果决定,因为它们被逐一检查。但是,如果该方法包含一个循环,并且我希望它在我不再需要循环时返回,我会在它自己的 if 语句中设置一个内部退出点(返回)以同时退出循环和方法。跨度>
【解决方案2】:

对我来说,这样更好:

private boolean myFunction(MyObjectType myObject) {
  if (myObject == null) {
    return false;
  }
  if (myInstanceVariable.myMethod()) {
    // Do something then return
    System.out.println(myObject.getSomeValue());
    return true;
  }
  return false;
}

如果您从 if 块内返回,则不需要 else 块。我发现它更好,因为这种看起来不太复杂的方法可以更好地表达逻辑的真正复杂性。更少的大括号和更少的缩进让它更容易理解,至少对我来说是这样。

【讨论】:

    猜你喜欢
    • 2018-11-09
    • 2013-05-08
    • 1970-01-01
    • 2019-07-30
    • 2013-08-19
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多