编程技巧:如何优雅的改造if/else

1,456 阅读2分钟

众所周知,在我们每天码代码的过程中,最经常使用到的可能就是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语句