背景
日常开发经常会遇到复杂的条件判断, 一般做法就是用if/else, 或者优雅一点用switch来实现多个条件的判断. 如果条件越来越多, 会导致代码越来越臃肿, 如何使用更优雅的方式来实现呢?
案例
先来看一段代码:
const clickHandler = (status) => {
if(status === 1) {
sendLog('processing')
jumpTo('IndexPage')
} else if(status === 2) {
sendLog('fail')
jumpTo('FailPage')
} else if(status === 3) {
sendLog('fail')
jumpTo('FailPage')
} else if(status === 4) {
sendLog('success')
jumpTo('SuccessPage')
} else if(status === 5) {
sendLog('cancel')
jumpTo('CancelPage')
} else {
sendLog('other')
jumpTo('Index')
}
}
优化1
通过以上代码, 可以看出该函数的作用是: 根据status状态的不同, 发送日志和跳转到对应的页面.
大家可以轻易的使用switch来进行重构:
const clickHandler = (status) => {
switch (status) {
case 1:
sendLog('processing')
jumpTo('IndexPage')
break
case 2:
case 3:
sendLog('fail')
jumpTo('FailPage')
break
case 4:
sendLog('success')
jumpTo('SuccessPage')
break
case 5:
sendLog('cancel')
jumpTo('CancelPage')
break
default:
sendLog('other')
jumpTo('Index')
}
}
这样看起来比if / else清晰多了. 细心的你一定会发现case2, case3的逻辑是一样的,
优化2
在日常的代码开发中, 基本上大多数同学都是这样写. 这样写固然可以, 但也不太优雅.
有一观点是: 编程的本质, 数据结构 + 算法, 任何算法都包含两部分, Logic + Control
Logic部分就是真正意义上的算法
Control部分只是影响解决问题的效率.
如果我们能将 Logic 和 Control部分有效地分开, 那么代码将会变得更