if else分支,以及return语句的位置?

时间:2012-07-30 01:46:11

标签: c++ coding-style

在一个函数中,其整个逻辑符合“如果此条件为真/假,则返回此项,否则返回此”,这是最好的或可能是最接受的形式?似乎有三种我见过的方式。

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

意思是,返回在分支之外,但是添加了一个变量和代码,而这些代码并不是功能所必需的。

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

1 个答案:

答案 0 :(得分:1)

好问题。显示您正在考虑样式,可读性以及我们以不同方式编写相同代码的基本原因。最后,这取决于你。

1号很好而且很清楚。

我正在测试错误情况时通常使用的数字2。如果我一路走到最底,那么我就会成功。奖励是你可以经常掉落花括号而不会失去清晰度。

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

在简单的情况下,你通常不会做3号。您可能希望将值存储在变量中。

你可以说这里有第四种选择:查询冒号运算符。如果您认为内联简单类成员是好的样式=)

,则很有用
int function(bool foo) { return foo ? doSomething() : somethingElse; }

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