0

在整个逻辑都遵循“如果此条件为真/假,则返回此,否则返回此”的函数中,最好或可能最接受的形式是什么?我似乎有3种方法。

int function(bool foo){
    if(foo){
         return doSomething();
    }else{
         return somethingElse;
    }
}

这是最有意义的,但我曾经读过具有返回类型的函数永远不应该将其返回类型放在分支中。(为什么,消息来源从未说过)那么就是这样:

int function(bool foo){
    if(foo){
         return doSomething();
    }
    return somethingElse;
}

它在分支之外有一个返回类型,但它带走了我认为的代码的一些含义,而且我还阅读了 if-else 块的好处。(这些是什么,消息来源也没有说)最后,有这个:

int function(bool foo){
    int result;
    if(foo){
         result = doSomething();
    }else{
         result = somethingElse;
    }
    return result;
}

意义就在那里,return 在分支之外,但添加了一个功能并不真正需要的变量和代码。

我的问题是,这三种形式中的哪一种,或者任何其他形式(如果有的话)是按照这种方式编写函数的最佳方式?

4

1 回答 1

2

好问题。表明您正在考虑样式、可读性以及我们以不同方式编写相同代码的根本原因。最终取决于你。

1号很好,很清楚。

编号 2 我通常在测试错误情况时使用。如果我一直到底部,那么我返回成功。一个好处是你可以经常放下花括号而不会失去清晰度。

当从内部循环设置结果时,数字 3 通常很有用,其中可能有多种返回值,或者当返回值从其他调用传递并且您需要中间检查时。哦,在您必须进行一些不依赖于您的返回值的常见清理时,这也是合适的。

在简单的情况下,您通常不会执行第 3 项。您希望有充分的理由将值存储在变量中。

您可能会争辩说这里有第四个选项:查询冒号运算符。如果您认为内联简单的类成员是好的风格,这很有用=)

int function(bool foo) { return foo ? doSomething() : somethingElse; }

我把它写在一行中,因为这通常是你看到它的时候。

于 2012-07-30T01:57:01.853 回答