编程技巧: 重构 if…else if…else…
关注 高级前端进阶 ,回复“ 加群 ”
加入我们一起学习,天天进步
作者: 赛博朋克的杰洛特
来源: https://juejin.im/post/5cfb0359e51d4556d86c7a8d
前言
新入职的公司,前人留下来一个项目,里面充斥着大量的 if…else…,则倒是其次,主要连注释写的都很少。面对这样的已经上线的代码,我并没有想去重构他因为成本太高,只好鞭策自己不要写出这种代码
面对的问题?
有时候,我们可能面对这样的业务逻辑(教育类公司),如果是回答过题目通过,如果回答过题目没有通过,如果没有回答过题目。如果不使用特定的模式,可能会写出下面这样的代码。一坨一坨的 if…else 看着非常不舒服,并且难以维护。
解决办法1: 查找表, 职责链查找表
虽然可能看着是治标不治本,其实不然,init 函数的复杂度大大的降低了。我们已经把控制流程的复杂逻辑,拆分到 determineAction 函数中
:arrow_up:上面复杂的情况,也可以吧action的判断抽离出来但是可能要写出三个抽离的函数,因为an值有三种不同的情况
解决办法2: 面向切面的编程(AOP)
为 Function 的原型链,扩展 after 语法,如果满足要求直接在函数内运算并返回结果。如果不满足条件返回 ‘next’ 调用职责链的下一个节点。所谓的 Function.prototype.after 就是在本函数执行前执行after添加的函数
解决办法3: 函数式编程
利用 ramda 等函数式编程库解决这种问题, :link:链接:http://ramda.cn/docs/#cond
:heart: 看完三件事
如果你觉得这篇内容对你挺有启发,我想邀请你帮我三个小忙:
-
点个「 在看 」,让更多的人也能看到这篇内容(喜欢不点在看,都是耍流氓 -_-)
-
关注我的官网 https:// m uyiy.cn ,让我们成为长期关系
-
关注公众号「 高级前端进阶 」,每周重点攻克一个前端面试重难点,公众号后台回复「面试题」 送你高级前端面试题。