众所周知,在我们每天码代码的过程中,最经常使用到的可能就是if/else条件判断语句了,我也曾经看到过满屏的都是if/else的代码,虽然不难理解,但是对于有代码洁癖的人来说还是希望能有更好的方式去改造它,毕竟我们都是有追求的程序员~ 那今天我就使用一种改造if/else代码的方式,让我们的代码组织的更好~
计算器例子:
使用if/else的代码方式编写
function calculate(num1,num2,action) {
if (action === 'add') {
return num1 + num2
}else if (action === 'subtract') {
return num1 - num2
}else if(action === 'multiply') {
return num1 * num2
}else if (action === 'divide') {
return num1 / num2
}else {
return 'calculate is not recongnised.'
}
}
上面的代码比较好理解,就是传入两个数组,和一个操作行为来进行加减乘除操作。这是使用if/else方式来写的代码,可以看出还算清晰的逻辑,毕竟这个时候业务还不算复杂。但是如果碰到逻辑非常复杂的场景,可能这种写法看着就不那么好了,那么接下来会使用Switch来进行改造
使用switch来改造
function calculateWithSwitch(num1,num2,action) {
switch (action) {
case 'add':
return num1 + num2
case 'subtract':
return num1 - num2
case 'multiply':
return num1 * num2
case 'divide':
return num1 / num2
default:
return 'calculate is not recongnised.'
}
}
用了switch来改写计算器的代码之后,可以感觉会比if/else好点,至少在很多判断条件的情况下能稍微简洁点,但是如果我们的逻辑非常多的话,全部都写在switch里也会很不好看,那么接下来我们就使用Object的方式进行改造一下
使用Object的方式改造
function calculateWithObject(num1,num2,action) {
const actions = {
add: (a,b) => a + b,
subtract: (a,b) => a - b,
multiply:(a,b) => a * b,
divide: (a,b) => a / b
}
// ?.判断函数是否存在,如果存在就调用,否则返回默认的字符串
return actions[action]?.(num1,num2) ?? 'calculate is not recognised.'
}
可以看出使用对象的key保存action行为,将逻辑拆分到不同的函数中去,可以大大的简化我们的代码,使逻辑更加清晰
总结:
在某些逻辑比较复杂的情况下,可以使用Object键值的方式来改造if/else语句