良好的编程习惯,包括大多数IF语句的ELSE语句?

时间:2014-01-27 18:33:00

标签: c if-statement

考虑这个伪代码:

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

在我看来,最后两个版本的可读性有所提高,但这三个循环都是等价的,对吧?这些实现之间的效率差异是什么?

2 个答案:

答案 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)

我将在我的原始评论后面进一步扩展。在我编程的三十年里,有两件事情几乎不变:

  • 程序员可以在一天内编写的代码行
  • 每行代码中出现的错误数

为此,使用更紧凑的表单可以更快地编写,并且在统计上更少的错误。正如我之前提到的,它在编辑时也不易出错,并且更易于推理。