2016-04-21 137 views
0

你应该写你的功能,如这里面:返回一个else语句

int foo() 
{ 
    if (bar) 
     return 1; 
    return 2; 
} 

还是这样吗?

int foo() 
{ 
    if (bar) 
     return 1; 
    else 
     return 2; 
} 

比其他更好的办法客观,或者是个人喜好的问题?如果有一种方式更好,为什么?

+0

这是个人喜好的问题。 – Thilo

+0

相关:http://stackoverflow.com/questions/27024084/is-there-a-performance-difference-between-returning-inside-if-block-or-writing?rq=1 http://stackoverflow.com/问题/ 26003104/java-best-style-for-return-statement-inside-or-outside-if-condition?rq = 1 http://stackoverflow.com/questions/32824797/different-design-decisions-with-if -else语句?rq = 1 – Thilo

+1

请注意,还有'return bar? 1:2' – Thilo

回答

1

没有在性能此事不同。 此处其个人偏好。我更喜欢第二个,因为它是干净和可以理解的。有经验的人可以立即掌握语法但是当你将第一种语法放在新程序员面前时,他会感到困惑。

我更喜欢整齐的代码(同时考虑到可读性和性能)。当第一种语法确实没有性能改进时,我会选择第二种语法。

0

上述任何陈述都没有性能改进,完全由您选择。编译器足够聪明,能够弄清楚你正在尝试做什么。我个人更喜欢第一个,因为这意味着更少的代码。然而在c#中,生成的msil在两种情况下都是相同的。

1

我尝试尽可能从函数中获取一个退出点。使代码更易于维护和调试。所以,我会做这样的事情:

int foo() 
{ 
    var retVal; 
    if (bar) { 
     retVal = 1; 
    } 
    else { 
     retVal = 2; 
    } 
    return retVal; 
} 

或者这个,如果你想成为更简洁...

int foo() 
{ 
    var retVal = 2; 
    if (bar) { 
     retVal = 1; 
    } 
    return retVal; 
} 
+0

你最近的'return'是无法访问的代码。 –

+0

@Reddy - 它如何无法访问?它将始终执行。 – RJM

+0

'return retVal;'无法访问..如果控件进入里面,那么if里面的return语句会被执行。否则,如果它跳过,否则将执行返回语句。没有其他的流程可用..你的语法会很好,如果它的'if'' else else' ... –