6 个避免过度使用 IF 语句的技巧

05f9c0c0bfd6a1d3526e27c326a459c6.png

英文 | https://levelup.gitconnected.com/6-tips-to-avoid-using-if-statements-17f99f118d23

最近,我在重构我之前的代码时,我发现早期的代码使用了太多的 if 语句,达到了我以前从未见过的程度。这就是为什么我认为分享这些可以帮助我们避免使用过多 if 语句的简单技巧很重要。

接下来,我将与你一起来分享这 6 种避免过度使用 if 的方法,这不是抵制使用if的偏执,而是换一种方式来思考我们的编程思路。

1. 三元条件运算符

示例 1:

带有 if 的代码:

function customerValidation(customer) {
  if (!customer.email) {
    return error('email is require')
  } else if (!customer.login) {
    return error('login is required')
  } else if (!customer.name) {
    return error('name is required')
  } else {
    return customer
  }
}

重构代码:

const customerValidation = customer =>
  !customer.email   ? error('email is required')
  : !customer.login ? error('login is required')
  : !customer.name  ? error('name is required')
                    : customer

示例 2:

带有 if 的代码:

function getEventTarget(evt) {
    if (!evt) {
        evt = window.event;
    }
    if (!evt) {
        return;
    }
    const target;
    if (evt.target) {
        target = evt.target;
    } else {
        target = evt.srcElement;
    }
    return target;
}

重构代码:    

function getEventTarget(evt) {
  evt = evt || window.event;
  return evt && (evt.target || evt.srcElement);
}

2.短路逻辑运算符

示例 1:

带有 if 的代码:

const isOnline = true;
const makeReservation= ()=>{};
const user = {
    name:'Damian',
    age:32,
    dni:33295000
};


if (isOnline){
    makeReservation(user);
}

重构代码:

const isOnline = true;
const makeReservation= ()=>{};
const user = {
    name:'Damian',
    age:32,
    dni:33295000
};


isOnline&&makeReservation(user);

示例 2:

带有 if 的代码:

const active = true;
const loan = {
    uuid:123456,
    ammount:10,
    requestedBy:'rick'
};


const sendMoney = ()=>{};


if (active&&loan){
    sendMoney();
}

重构代码:

const active = true;
const loan = {
    uuid:123456,
    ammount:10,
    requestedBy:'rick'
};


const sendMoney = ()=>{};


active && loan && sendMoney();

3.功能委托

示例 1:

带有 if 的代码:

function itemDropped(item, location) {
    if (!item) {
        return false;
    } else if (outOfBounds(location) {
        var error = outOfBounds;
        server.notify(item, error);
        items.resetAll();
        return false;
    } else {
        animateCanvas();
        server.notify(item, location);
        return true;
    }
}

重构代码:

function itemDropped(item, location) {
    const dropOut = function() {
        server.notify(item, outOfBounds);
        items.resetAll();
        return false;
    }


    const dropIn = function() {
        server.notify(item, location);
        animateCanvas();
        return true;
    }


    return !!item && (outOfBounds(location) ? dropOut() : dropIn());
}

4. 非分支策略

示例 1:

带开关的代码:

switch(breed){
    case 'border':
      return 'Border Collies are good boys and girls.';
      break;  
    case 'pitbull':
      return 'Pit Bulls are good boys and girls.';
      break;  
    case 'german':
      return 'German Shepherds are good boys and girls.';
      break;
    default:
      return 'Im default'
}

重构代码:

const dogSwitch = (breed) =>({
  "border": "Border Collies are good boys and girls.",
  "pitbull": "Pit Bulls are good boys and girls.",
  "german": "German Shepherds are good boys and girls.",  
})[breed]||'Im the default';


dogSwitch("border xxx")

5.作为数据的函数

我们知道在 JS 中函数是第一类,所以使用它我们可以将代码拆分成一个函数对象。

带有 if 的代码:

const calc = {
    run: function(op, n1, n2) {
        const result;
        if (op == "add") {
            result = n1 + n2;
        } else if (op == "sub" ) {
            result = n1 - n2;
        } else if (op == "mult" ) {
            result = n1 * n2;
        } else if (op == "div" ) {
            result = n1 / n2;
        }
        return result;
    }
}


calc.run("sub", 5, 3); //2

重构代码:

const calc = {
    add : function(a,b) {
        return a + b;
    },
    sub : function(a,b) {
        return a - b;
    },
    mult : function(a,b) {
        return a * b;
    },
    div : function(a,b) {
        return a / b;
    },
    run: function(fn, a, b) {
        return fn && fn(a,b);
    }
}


calc.run(calc.mult, 7, 4); //28

6.多态性

多态性是一个对象具有多种形式的能力,OOP 中多态性最常见的用法是使用父类引用来引用子类对象。

带有 if 的代码:

const bob = {
  name:'Bob',
  salary:1000,
  job_type:'DEVELOPER'
};


const mary = {
  name:'Mary',
  salary:1000,
  job_type:'QA'
};


const calc = (person) =>{


    if (people.job_type==='DEVELOPER')
        return person.salary+9000*0.10;


    if (people.job_type==='QA')
        return person.salary+1000*0.60;
}


console.log('Salary',calc(bob));
console.log('Salary',calc(mary));

重构代码:

const qaSalary  = (base) => base+9000*0.10;
const devSalary = (base) => base+1000*0.60;


//Add function to the object.
const bob = {
  name:'Bob',
  salary:1000,
  job_type:'DEVELOPER',
  calc: devSalary
};


const mary = {
  name:'Mary',
  salary:1000,
  job_type:'QA',
  calc: qaSalary
};


console.log('Salary',bob.calc(bob.salary));
console.log('Salary',mary.calc(mary.salary));

总结

以上就是我今天想要与你分享的6个关于避免使用if语句的技巧,如果你觉得有用的话,请记得点赞我,关注我,并将这篇文章分享给你的朋友,也许能够帮助到他。

最后,感谢你的阅读,快乐学习,开心编程。

学习更多技能

请点击下方公众号

1afd12fb1be6fbb0d1cbec54be89b50e.gif

3983a50f251dc7477e550b7764b231e1.jpeg

2f5052b7df03211c2a58685687b9f4aa.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Switch语句的case中,不能使用其他的判断结构,如if、while等。Switch语句的case后面应该是一个常量表达式,而不是一个布尔表达式。当Switch语句执行时,会将被测试的变量的值与case子句中的常量表达式进行比较,如果匹配则执行相应的语句,如果不匹配则跳过该case子句,继续匹配下一个case子句。因此,Switch语句中的case只能使用常量表达式作为判断条件,而不能使用其他的判断结构。 ### 回答2: 在Switch语句的case中,不能使用其他判断结构。Switch语句是一种多分支选择结构,用于根据一个表达式的值来选择执行不同的代码块。在Switch语句中,每个case表示一个不同的可能值,当表达式的值与某个case相等时,程序会执行该case后的代码块。Switch语句会按照从上到下的顺序进行匹配,直到找到与表达式值相等的case为止。 Switch语句的每个case只能跟一个具体的值,不支持使用其他的判断结构或逻辑表达式。每个case后面需要使用冒号来分隔,表示后面是要执行的代码块。如果没有找到与表达式值相等的case,可以使用default关键字来指定一个默认的执行代码块。 如果需要在case中进行其他复杂的判断逻辑,可以考虑使用if语句来代替。if语句可以包含任意复杂的判断条件和逻辑表达式,用于根据条件来选择执行不同的代码块。如果判断逻辑较为复杂且有多个条件需要判断,if语句可能会更灵活和方便。 ### 回答3: 在switch语句中,case后面只能跟常量表达式,不能直接使用其他判断结构(例如if语句)。switch语句适用于多个固定的条件进行比较,根据不同条件执行不同的代码块。 然而,我们可以通过一些技巧来实现在case语句使用其他判断结构。一种方法是使用嵌套的switch语句,在case语句块中再次使用switch语句对于更具体的条件进行判断。这种方式可以实现多层次的条件判断,但会增加代码的复杂性。 另一种方法是使用逻辑运算符和布尔表达式来模拟其他判断结构。我们可以使用多个case语句来组合多个条件,利用逻辑运算符(例如&&和||)将多个条件连接起来,实现更灵活的条件判断和执行。 然而,这种方式会使代码变得复杂难以阅读,降低代码的可维护性和可读性,因此不建议过多地在case中使用其他判断结构。 总而言之,虽然在switch语句的case中不能直接使用其他判断结构,但我们可以通过嵌套的switch语句或者利用逻辑运算符和布尔表达式来达到类似的效果。但我们应该尽量保持代码的简洁和清晰,避免过度复杂的判断结构嵌套。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值