【问题标题】:Need to know good practice should i follow on below code如果我遵循以下代码,需要知道良好的做法
【发布时间】:2017-03-27 19:40:24
【问题描述】:

我有代码:

 int good_practice(void)
    {
      if (somethings == TRUE)
       return true;  //i am asked to remove it coz it will reach anyhow at end and do same but i feels it is good practice and why should i wait for end?
      else
       return false
      }
     }
     return true; 
    }

我被要求删除第一个返回,因为它最终会到达函数的末尾并返回 true。这样好吗?

我觉得为什么我需要等待 cpu 在函数结束时返回并返回虽然我可以提前做结束?

如果我等待结束,我会增加时间复杂度(我知道它不会有任何区别)但指令也不会增加。

请帮我摆脱这种困惑?

【问题讨论】:

    标签: c return time-complexity


    【解决方案1】:

    要求您删除第一个return true,因为您可以像这样简单地检查,而不会有额外的冗余return true

    int good_practice(void) {
        if(!somethings) { 
            return false;
        }
        return true;
    }
    

    无论如何,有问题的代码几乎是冗余

    您可以将其替换为更好的版本,如下所示:

    int good_practice(void)
    {
        return somethings;
    }
    

    关于提前归还:

    通常最好在最后返回一个,因为提前返回时获得的性能远不及通过返回所获得的可读性。

    (不过这只是我自己的经验)。

    【讨论】:

    • 他对这种特殊情况不感兴趣。这只是一个例子。他在问,当函数最终返回相同的值时,提前返回是否有意义。
    【解决方案2】:

    这被称为“提前回归”,我认为没有明确的共识。

    优点:

    • 如果你提前返回,你不能错误地执行一些其他代码。
    • 如果您正在阅读这个特定的执行分支,提前返回会使流程更加明确。
    • 也可以通过提前返回来降低缩进级别。

    缺点:

    • 查看整个函数时,更容易错过提前返回。

    之前有一些类似的关于提前退货的问题,see here for example

    【讨论】:

    • 考虑到 OP 的 If-Else 不使用花括号的习惯,OP 不应该使用 Early return... 可能会出现类似 Apple 的 SSL Goto 错误 ;-)
    猜你喜欢
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多