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

2016-04-07 17:54:57 +08:00
 wuhuaji

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

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

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

2947 次点击
所在节点    问与答
15 条回复
levn
2016-04-07 21:15:54 +08:00
把里面的写成函数。。
ihuotui
2016-04-07 22:37:26 +08:00
建议看一看 重构 那本书
banricho
2016-04-08 00:43:27 +08:00
少用 else ,提前 return 出去呗 -。-
lightening
2016-04-08 02:02:15 +08:00
把那个逻辑抽象成类,用继承。
Perry
2016-04-08 02:05:21 +08:00
看什么语言吧,比如 Scheme 可以用 cond
msg7086
2016-04-08 03:05:15 +08:00
不知道是什么语言不过如果是面向对象的话,

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

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

吗? NASA 是使用的 LISP
ihuotui
2016-04-11 16:24:43 +08:00
@ihuotui 还有 head frist 设计模式, https://book.douban.com/subject/2243615/
代码写不好,是 50%思想不对, 40%经验不足, 10%思维短路,然而前面两个都是可以学习的。第三个可以交流。

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

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

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

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

© 2021 V2EX