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 或提前返回 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章