if-> return vs if-> else效率

时间:2012-02-13 20:37:44

标签: performance return if-statement

这听起来像是一个愚蠢的问题,我犹豫要发布它,但仍然: 如果某些东西只需要在某种条件下运行,哪一种更有效:

:一种。

if (condition) {
   // do
   // things...
}

if (!condition) { return; }
// do
// things...

6 个答案:

答案 0 :(得分:24)

它们同样有效,但 B 通常被认为具有更好的可读性,尤其是在用于消除多种嵌套条件时。

答案 1 :(得分:12)

请选择最具可读性的东西。此级别的性能优化几乎不是问题。即使是真正对性能敏感的框架部分(例如.NET框架)也无法从这种微优化中受益。

答案 2 :(得分:7)

真正的问题是,你真的在​​乎吗?

我说不!拥有更好的可读代码比做一些微优化更重要。

答案 3 :(得分:7)

这是一种风格的东西。表现不相关;两者都产生几乎相同的机器码。

关于风格的几点考虑:

如果您想避免横向编程',您可能希望更喜欢B来避免嵌套条件。例如,如果要在不影响方法流程的情况下添加异常:

<强> A

public String getDescription(MyObject obj) {
    if (obj == null) {
        return "";
    } else {
        if (!obj.isValid()) {
            return "invalid";
        } else {
            ...
        }
    }
 }

<强>乙

public String getDescription(MyObject obj) {
    if (obj == null) {
        return "";
    }

    if (!obj.isValid()) {
        return "invalid";
    }

    ....
 }

但如果你问我,差异很小。绝对不值得进行代码风格的战争&#39;。

答案 4 :(得分:3)

虽然我同意你应该首先选择可读性,但我会继续添加一些信息:在C#中,没有区别。它编译成相同的东西(通过构建发布模式进行优化)。其他语言?谁知道,我相信他们中的一些人认为它有所不同,但实际上你需要关注它的可能性很小。

答案 5 :(得分:0)

在两种情况下,性能大致相同。因此,它更多地成为样式或偏好问题。

我个人更喜欢编写if->返回(即情况B),因为如果代码包含复杂的嵌套条件,它会使代码看起来更简洁且易于阅读。