V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ChrisZou
V2EX  ›  程序员

代码设计之 Guard clause

  •  
  •   ChrisZou ·
    ChrisZou · 2020-07-24 14:59:39 +08:00 · 1707 次点击
    这是一个创建于 1365 天前的主题,其中的信息可能已经有所发展或是发生改变。

    说白了,就是不要一个方法里面只有一个长长长长的 if 大块,而是尽早 return https://chriszou.com/2020/07/24/guard-clause/

    11 条回复    2020-07-26 11:47:55 +08:00
    gantleman
        1
    gantleman  
       2020-07-24 15:17:06 +08:00
    逻辑判断是一种条件筛选,目的是处理筛选的结果。
    看不懂尽快返回这个判断标准。
    也看不出两个例子的区别。
    guoptr42
        2
    guoptr42  
       2020-07-24 15:33:46 +08:00
    个人很喜欢这种代码风格,看到项目里面一层套一层的 if 就头大。
    kop1989
        3
    kop1989  
       2020-07-24 15:37:16 +08:00   ❤️ 1
    说白了就是要尽量把非目标情况放在 if 里当条件。然后一旦不符合执行条件就 return,要 if return if return do something 而不要 if do something else return
    SmiteChow
        4
    SmiteChow  
       2020-07-24 16:23:33 +08:00
    卫语句 又称 提前返回 /提前退出
    Kirsk
        5
    Kirsk  
       2020-07-24 16:27:36 +08:00 via Android
    重构:改善既有代码的设计
    autoxbc
        6
    autoxbc  
       2020-07-24 16:46:36 +08:00   ❤️ 1
    其实有两个流派

    一个是平铺派,缩进即地狱;
    一个是结构派,花括号套一切;
    互相说服是很难的

    平铺派用 13 寸笔记本写代码,要求函数不能超过 40 行;
    结构派用 42 寸巨屏,一眼就能扫到 120 行处的 return
    ChrisZou
        7
    ChrisZou  
    OP
       2020-07-24 19:33:09 +08:00
    @guoptr42 是的
    ChrisZou
        8
    ChrisZou  
    OP
       2020-07-24 19:34:37 +08:00
    @autoxbc 不一定是屏幕大不大的问题,下面的代码只要离开头的 if 远了,就很难一眼看出是 if 里面的还是 if 外面的。
    lensko
        9
    lensko  
       2020-07-24 19:42:58 +08:00
    不是每个程序员都会看《代码整洁之道》。
    wty
        10
    wty  
       2020-07-24 19:53:50 +08:00 via Android
    这种写法有个问题就是容易漏掉资源释放,不过好在现在的语言多少带一些资源回收的功能了。要是像 c 语言里面 malloc free,这么写每个 return 前面要写一堆东西,还是有点头疼。。。

    另外想起来个图 h 。tt 。p://cdn.en.wotype.com/wp-content/uploads/2014/07/hadouken-indent.jpg
    ChrisZou
        11
    ChrisZou  
    OP
       2020-07-26 11:47:55 +08:00
    @wty 哈哈哈,这个图简直太形象了!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2717 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:56 · PVG 22:56 · LAX 07:56 · JFK 10:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.