在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 语句,它啥都不做?