wuhuaji
V2EX  ›  问与答

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

  •  
  •   wuhuaji · Apr 7, 2016 · 3675 views
    This topic created in 3867 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    另外正如二楼所说的,请看重构: https://book.douban.com/subject/4262627/
    O3YwA1ENkb7i35XJ
    O3YwA1ENkb7i35XJ
    Apr 8, 2016❤️1
    14
    @rainysia 不应该是 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

    吗? NASA 是使用的 LISP
    ihuotui
    ihuotui
    Apr 11, 2016❤️1
    15
    @ihuotui 还有 head frist 设计模式, https://book.douban.com/subject/2243615/
    代码写不好,是 50%思想不对, 40%经验不足, 10%思维短路,然而前面两个都是可以学习的。第三个可以交流。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1997 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 105ms · UTC 04:44 · PVG 12:44 · LAX 20:44 · JFK 23:44
    ♥ Do have faith in what you're doing.