考虑这个伪代码:
while( 1 ){
if( this happens )
break;
if( something else is true )
do something;
}
此代码可以转换为阶段:如果this happens
中断,则继续do something
。这基本上等同于:如果this happens
中断,则ELSE do something
。
很容易看出,如果this happens
那么我们将打破无限循环,否则我们将执行剩余的代码。
然而,如果我们从循环中脱离,那么我们显然不会担心如果something else
我是真的。那么,做这样的事情一定是个好主意吗?
while( 1 ){
if( this happens )
break;
else
if( something else is true )
do something;
}
在这种情况下,我可以看到需要的ELSE语句:
while( 1 ){
if( !(this happens) ){
if( something else is true)
do something;
}
else
break;
}
在我看来,最后两个版本的可读性有所提高,但这三个循环都是等价的,对吧?这些实现之间的效率差异是什么?
答案 0 :(得分:4)
我只是问一个关于是否有必要包括非必要的ELSE陈述以及对效率的相关影响的问题。
while( 1 ){
if( this happens )
break;
if( something else is true )
do something;
}
或
while( 1 ){
if( this happens )
break;
else
if( something else is true )
do something;
}
基本上,我会说两者都相当,如果我严格考虑我的大学课程,两者都错了。但这不是因为您是否使用else
,而是因为您在while语句中执行了不必要的条件。在每个循环中,您都会测试1
是否为真,这总是如此,然后您使用if
条件进行测试,因此基本上您的示例的正确形式将是:
while ( ! (this happens) ) {
if (something else)
do something;
}
这种方式更具可读性,效率也更高(++i;
的效率与i++;
相同)
最后,我想我们所讨论的所有形式在效率方面都是完全相同的,因为编译器应该能够轻松地将其转换为相同的组装复杂性,但是根据上下文,可能会更好比其他人更容易阅读。
我的2美分......
答案 1 :(得分:2)
我将在我的原始评论后面进一步扩展。在我编程的三十年里,有两件事情几乎不变:
为此,使用更紧凑的表单可以更快地编写,并且在统计上更少的错误。正如我之前提到的,它在编辑时也不易出错,并且更易于推理。