if-else 或提前返回 [关闭]

Posted

技术标签:

【中文标题】if-else 或提前返回 [关闭]【英文标题】:if-else or early return [closed] 【发布时间】:2017-02-21 23:45:53 【问题描述】:

有时我喜欢使用提前返回语句来防止嵌套 if 语句,我发现这会降低代码的可读性。

我想知道是否有任何客观或压倒性的普遍共识,因为以下两种模式是更好的做法?我不认为这是一个主观问题,因为我真正要问的是有一个近乎客观的偏好。

void func() 
    if (a) 
        do b
        
    else 
        do c
    

void func() 
    if (a) 
        do b
        return;
    

    do c

【问题讨论】:

我一直认为 return 语句应尽可能限制在函数末尾使用,因为它更易于阅读和理解流程。其他人可能不同意,但这就是我选择第一个 sn-p 的原因。 我觉得和这个***.com/questions/36707/…很像 重复softwareengineering.stackexchange.com/questions/18454/… 关于软件工程的问题有更高质量的答案。 【参考方案1】:

我会选择第一个版本。实际上,几年前我已经对此进行了冗长的解释。

正如您现在所写的,这两个示例在功能上是相同的。如果a 条件为真,则第一个if 条件中的逻辑将执行,函数将返回。但是,仔细看看第二种情况:

void func() 
    if (a) 
        do b
        return;
    

    do c

现在,如果第一个 if 触发,函数将返回,否则 c 将执行。然而,考虑到在某个时刻,程序员出于某种原因决定重构该方法。如果他要取出return 语句,那么如果a 为真,c 的逻辑会执行。这似乎有些牵强,但它可能比您想象的更容易发生。另一方面,如果您使用完整的if-else,那么即使重构if 条件也永远不会导致c 逻辑同时评估。

【讨论】:

【参考方案2】:

第一个更好。简而言之,它帮助其他开发人员了解 c 编译是因为条件为假。它还可以防止其他人对您的代码进行破坏性更改。也就是说,它们都是正确的,并且都可以正常工作

【讨论】:

我不同意,这第一个选项绝对不好。 softwareengineering.stackexchange.com/questions/18454/…【参考方案3】:

坦率地说,我推荐第二个。

    第二个更清晰易懂
    当其他一些修改代码更容易理解是第一位的。 也许第一个在数学中更清楚,但在人类中却不是。

【讨论】:

以上是关于if-else 或提前返回 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C# 之 if-else代码优化

优化if-else代码的八种方案!

优化if-else代码的八种方案

if-else代码优化的八种方案

Javascript 条件返回语句(简写 if-else 语句)

如何少写if-else