大家写代码时喜欢用 Guard Clause 还是一条路径走到底?

2018-07-03 01:00:52 +08:00
 agagega

前两天 Code Review 的时候被指出了这个问题。

如题,是

bool func() {
  if (xxx) return false;
  if (xxx) return true;
  xxx;
  return true;
}

还是

bool func() {
  if (xxx) {
    if (xxx) return false;
    else return true;
  } else {
    xxx;
    return true;
  }
}

好像前者一般比较清爽,缩进层次也少。我只看过王垠在他的博客里强烈支持过第二种。

5269 次点击
所在节点    程序员
32 条回复
Chieh
2018-07-03 10:18:53 +08:00
原则上用第二种,如果较短的 if else 两行能放下的话就用第一种
feiyuanqiu
2018-07-03 10:23:07 +08:00
@jjzhanhun return xxx ? false : true;

xxx 的运算结果本来就是个 bool,为什么还要用三目运算符再处理一次?
akira
2018-07-03 11:01:02 +08:00
前面的 嵌套越少越好
ConradG
2018-07-03 11:51:38 +08:00
分支多,或分支条件琐碎的,多用第一种。
分支少,尤其二择多用第二种。
cuzfinal
2018-07-03 12:05:25 +08:00
第一种避免箭头形代码。
newtype0092
2018-07-03 12:17:37 +08:00
第二种逻辑更完整,不过可读性差,需要配合 ide 检查,个人觉得这种更适合自动生成而不是手动去写。
手写代码还是用第一种更合理,逻辑更清楚,而且一定程度上能反应写代码的思路。

有些人觉得第二种写法这样的冗余工作有助于减少出错,但我认为如果手写这种代码的话眼花出错的概率更高,而且看的头大干扰了自己的思路更容易写错。

人的思考还是应该求巧,求全是靠各种重复冗余来保证,这是机器该做的,与其不辞辛劳去做冗余工作,不如造一个机器帮自己偷懒。
agagega
2018-07-03 13:50:02 +08:00
@VVVVVEX 其实一般的新一点的项目我觉得 108 或者 120 字符都可以接受,风格统一的问题。
agagega
2018-07-03 13:51:23 +08:00
@liuxey
@crayygy
确实,这里只是举个例子,还是都带花括号的好
AltairT
2018-07-03 15:46:06 +08:00
王垠的文章我看过,貌似不是你第二种那样。他明明说了类似意思的话 1 避免箭头代码的方法是将条件反转,提前返回(就是你说的防御代码);2 为了防止遗漏情况,有 if 就必须有 else。
这两条也不矛盾啊。还是你没理解清楚
pynix
2018-07-03 16:41:25 +08:00
前期可能会先走逻辑(约定参数都有效),,,,后期会慢慢加参数验证。。。
morethansean
2018-07-03 16:51:07 +08:00
第一种,当年写 WE 养成的习惯 2333333
luozic
2018-07-04 10:09:18 +08:00
直接 if,如果分支切分覆盖不对,还不是一样坑。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/467641

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX