Performance 如果->;回报与如果->;其他效率

Performance 如果->;回报与如果->;其他效率,performance,return,if-statement,Performance,Return,If Statement,这听起来可能是一个愚蠢的问题,我犹豫了一下是否发布它,但仍然: 如果某个设备只需要在特定条件下运行,以下哪项更有效: A. if (condition) { // do // things... } if (!condition) { return; } // do // things... B. if (condition) { // do // things... } if (!condition) { return; } // do // things...

这听起来可能是一个愚蠢的问题,我犹豫了一下是否发布它,但仍然: 如果某个设备只需要在特定条件下运行,以下哪项更有效:

A.

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

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

真正的问题是,你真的应该在乎吗


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

请选择可读性最好的代码。这一级别的性能优化几乎从来都不是问题。即使是框架中真正对性能敏感的部分(如.NET framework)也无法从这种微观优化中获益。

它们同样有效,但通常认为B具有更好的可读性,特别是当用于消除几个嵌套条件时。

虽然我同意您应该首先选择可读性,但我会继续添加一些信息:在C#中,没有区别。它编译为相同的内容(通过构建发布模式进行优化时)。其他语言?谁知道,我相信他们中的一些人认为它是不同的,但是你实际上需要关注它的可能性是微不足道的。< P>这是一个风格的东西。表现不相关;两者产生几乎相同的机器代码

关于样式的一些注意事项:

如果您想避免“水平编程”,您可能希望使用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";
    }

    ....
 }
B

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

    ....
 }

但如果你问我的话,差别很小。绝对不值得一场“代码式战争”。

在这两种情况下,性能或多或少是相同的。因此,它更像是一个风格或偏好问题


我个人更喜欢编写if-->return,即case B,因为它使代码看起来更干净,更易于阅读,特别是当代码包含复杂的嵌套条件时。

您衡量过这一点吗?你发现了什么?这是一种时尚。表现不相关;两者产生几乎相同的机器代码。如果您想避免“水平编程”,您可能希望B避免嵌套条件。当您有类似问题时,请查看。非常有用的网站!你说的是哪种语言和框架?(这并不重要,因为所有语言和框架的答案都是一样的)。此外,我当然理解这是一个“不必要的”(或者用最糟糕的话来说是“愚蠢的noobish”)问题,并期望(并得到)至少一个“严厉的回应”,但它被邀请是出于真正的兴趣和渴望听到更多专家对它的看法(也得到了这些,所以谢谢)。