在if语句之后返回vs啥都不做[重复]

Posted

技术标签:

【中文标题】在if语句之后返回vs啥都不做[重复]【英文标题】:return vs do nothing after if statement [duplicate]在if语句之后返回vs什么都不做[重复] 【发布时间】:2017-06-22 19:52:09 【问题描述】:

这两个函数在代码执行方面有什么区别。结果是一样的,但是编译器会优化到同一个输出的程序集吗?

void some_func() 

   if (!something)
      return;
   //rest of code


void other_func() 

   if (something) 
      //rest of code
   

【问题讨论】:

为什么不直接检查编译器输出? 没有区别。编译器是否会同样优化它们取决于编译器。 但即使没有,差异也可以忽略不计。 Premature optimization is the root of all evil 我在检查前置条件(或抛出异常)时使用 case(1)。它使(前置条件的)测试结束和实际代码开始的位置变得很明显。 【参考方案1】:

汇编指令的精确翻译取决于编译器,但很可能完全相同和/或可以忽略不计。

这通常用于提高任何速度优化尝试的可读性。

【讨论】:

【参考方案2】:

首选前者。它更简单,更易读。

void foo()

    if( error_condition)
    
       // Handle error
       return;
    

    // Carry on

    if( other_error_condition)
    
       // Handle error
       return;
    

    // Carry on

    // Done

有些人认为任何函数都应该只有一个返回值,但这在很长一段时间内都不是最佳实践,而且是汇编时代遗留下来的神话。

替代方案导致很多嵌套的丑陋

void foo()

    if( !error_condition)
    
       // Do stuff

       if ( !other_error_condition )
       
           // Do other stuff
       
       else           
       
            // Handle error
       
    
    else
    
        // Handle error
     

    // Done

【讨论】:

“最佳实践”永远不可能是“真”或“假”,它只是不再是最佳实践。

以上是关于在if语句之后返回vs啥都不做[重复]的主要内容,如果未能解决你的问题,请参考以下文章

是否有一个 JavaScript 等价于 Python pass 语句,它啥都不做?

R:如何在向量上使用类似“if”的函数但没有“ifelse”,因为如果没有,它应该啥都不做

python 笔记:函数

Javascript 在 if 语句中返回 false

不做if语句PHP [重复]

使用 while 块啥都不做是件坏事吗?