26

编程技巧: 重构 if...else if...else...

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzU3NjczNDk2MA%3D%3D&%3Bmid=2247484798&%3Bidx=1&%3Bsn=4878e213e314b50629251ce1071f5267
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

关注  高级前端进阶 ,回复“ 加群

加入我们一起学习,天天进步

zAfyYbN.jpg!web作者: 赛博朋克的杰洛特

来源: 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: 看完三件事

如果你觉得这篇内容对你挺有启发,我想邀请你帮我三个小忙:

  1. 点个「 在看 」,让更多的人也能看到这篇内容(喜欢不点在看,都是耍流氓 -_-)

  2. 关注我的官网  https:// m uyiy.cn ,让我们成为长期关系

  3. 关注公众号「 高级前端进阶 」,每周重点攻克一个前端面试重难点,公众号后台回复「面试题」 送你高级前端面试题。

AJ3mAna.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK