V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wuhuaji
V2EX  ›  问与答

如何避免/或者更好地处理编程中的多重 if 嵌套?

  •  
  •   wuhuaji · 2016-04-07 17:54:57 +08:00 · 2925 次点击
    这是一个创建于 3152 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如,在写业务代码时,常常会有多重判断,所以代码可能会是这样:

    if(a){
        if(a1){
            if(a11){
                alll
            }else{
                a12
            }
        }else{
            a2
        }
    }else{
        b
    }
    
    

    而这种多层嵌套,显然不是好的编程方式,有什么好的技巧 /或方法解决这个问题吗? segmentfault 传送门: https://segmentfault.com/q/1010000004888693

    第 1 条附言  ·  2016-04-11 18:05:47 +08:00
    多谢各位,看了各位的回复很有收获,看来不仅要多写,还要多思考。
    15 条回复    2016-04-11 16:24:43 +08:00
    levn
        1
    levn  
       2016-04-07 21:15:54 +08:00 via iPad   ❤️ 1
    把里面的写成函数。。
    ihuotui
        2
    ihuotui  
       2016-04-07 22:37:26 +08:00   ❤️ 1
    建议看一看 重构 那本书
    banricho
        3
    banricho  
       2016-04-08 00:43:27 +08:00   ❤️ 2
    少用 else ,提前 return 出去呗 -。-
    lightening
        4
    lightening  
       2016-04-08 02:02:15 +08:00   ❤️ 1
    把那个逻辑抽象成类,用继承。
    Perry
        5
    Perry  
       2016-04-08 02:05:21 +08:00 via iPhone
    看什么语言吧,比如 Scheme 可以用 cond
    msg7086
        6
    msg7086  
       2016-04-08 03:05:15 +08:00   ❤️ 1
    不知道是什么语言不过如果是面向对象的话,

    https://robots.thoughtbot.com/tell-dont-ask
    techmoe
        7
    techmoe  
       2016-04-08 05:43:03 +08:00   ❤️ 1
    三元表达式
    ShiHou
        8
    ShiHou  
       2016-04-08 07:05:33 +08:00   ❤️ 1
    rainysia
        9
    rainysia  
       2016-04-08 09:29:39 +08:00
    据说某俄国特工九死一生偷到了 NASA 太空火箭发射程序源代码的最后一页, 打印出来后:
    }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
    shineMicroxy
        10
    shineMicroxy  
       2016-04-08 09:33:05 +08:00   ❤️ 1
    if(!n){
    return;
    }
    //do something
    shakoon
        11
    shakoon  
       2016-04-08 09:33:42 +08:00   ❤️ 1
    改用 case when
    ProfFan
        12
    ProfFan  
       2016-04-08 09:34:40 +08:00   ❤️ 1
    状态机啊
    yunying
        13
    yunying  
       2016-04-08 09:35:13 +08:00   ❤️ 1
    合理利用继承和多态

    另外正如二楼所说的,请看重构: https://book.douban.com/subject/4262627/
    xqin
        14
    xqin  
       2016-04-08 11:24:25 +08:00   ❤️ 1
    @rainysia 不应该是 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

    吗? NASA 是使用的 LISP
    ihuotui
        15
    ihuotui  
       2016-04-11 16:24:43 +08:00   ❤️ 1
    @ihuotui 还有 head frist 设计模式, https://book.douban.com/subject/2243615/
    代码写不好,是 50%思想不对, 40%经验不足, 10%思维短路,然而前面两个都是可以学习的。第三个可以交流。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   906 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:46 · PVG 05:46 · LAX 13:46 · JFK 16:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.