在js开辟中,怎样削减if else语句的运用

那末题目来了,在js开辟中,怎样削减if else语句的运用

代码中嵌套的if/else构造每每致使代码不美观,也不易于明白。面向历程的开辟中代码有大批的IF ELSE,在java中能够用一些设想形式替换掉这些逻辑,那末在js中是不是也有相似的要领用来只管削减代码中的if/else嵌套呢?

有人以为:if else多就多呗,只需可读性强,保护起来轻易。jQuery.fn.init里就是一堆if else推断,岂非要质疑jQuery作者的水平了?
并非说if else多就不好,关键是看用的处所,jQuery.fn.init里除了if else推断简约点,岂非要改成switch?就算用工场形式,还不是得做大批的if推断。

代码整齐强迫症患者必需要来个举一反三:

1.

if(a为真){
    a=a
}else{
    a=b
}

可写成:a = a || b

2.

if(a==b){
    a=c
}else{
    a=d
}

可写成:a = (a==b) ? c : d

3.

背景接口通常会返回这类数据:
fruit: 0 // 0=苹果,1=梨子,2=桔子,3=柠檬,4=芒果…
这时刻写if…else是最痛楚的。从冲哥那偷来个要领:

var _f = ['苹果','梨子','桔子','柠檬','芒果'];
shuiguo = _f[fruit];

发起:

第一步:优化if逻辑

人们斟酌的东西到时刻,都会把最能够发生的状况先做好预备。优化if逻辑的时刻也能够如许想:把最能够涌现的前提放在前面,把最不能够涌现的前提放在背面,如许顺序实行时总会依据带啊名的先后顺序一一检测一切的前提,晓得发明婚配的前提才会住手继续检测。

if的优化目的:最小化找到分支之前所推断前提体的数目。if优化的要领:将最常见的前提放在首位。

if (i < 5) {
    // 实行一些代码
 } else if (i > 5 && i < 10) {
    // 实行一些代码
 } else {
    // 实行一些代码
 }

比方上面这个例子,只要在i值常常涌现小于5的时刻是最优化的。假如i值常常大于或许即是10的话,那末在进入准确的分支之前,就必需两次运算前提体,致使表达式的均匀运算时候增添。if中的前提体应当老是依据从最大几率到最小几率分列,以保证理论速率最快。

第二步:只管少运用else

假如在函数中,能够运用 if + return,先推断毛病前提,然后立马完毕函数,防备进入 else 分支。

举个简朴的例子,后端返回数据,前端依据状况举行差别操纵

$.ajax().done(function (res) {
    if (res.state === 'SUCCESS') {
        //TODO
    } else if (res.state === 'FAIL') {
        //TODO
    } else {
        //TODO
    }
});

这里用if else不挺好的么,有啥题目么?不过我个人倾向于switch。

处理要领:

1. switch/case

switch和if else在机能上是没有什么区别的,重要照样依据需求举行剖析和挑选。

  • 假如前提较小的话选用if else比较适宜。

  • 相反,前提数目较大的话,就发起选用switch。

一般来说,if else适用于两个离散的值或许差别的值域。假如推断多个离散值,运用switch越发适宜。

在大多数的状况下switch比if else运转的越发快。

在大多数状况下,switch的机能不会比if else低。switch确实在实质上跟if else if 完整一样的结果,不过在很多状况下,运用switch要比if else轻易不少

比方典范的值等分支,婚配一些状况常量的时刻,比if else构造轻易很多,不必反复写xx == yy

$.ajax().done(function (res) {
    switch (res.state) {
        case 'SUCCESS':
            //TODO
            break;
        case 'FAIL':
            //TODO
            break;
        default :
            //TODO
    }
});

注重:万万不要忘记在每一个case语句背面放一个break语句。也能够放一个return或许throw。case语句婚配expression是用===而不是==。

2.hash 表

if (key == "Apple") {
    val = "Jobs";
} else if (key == "microsoft"){
    val = "Gates";
} else if (key == "Google"){
    val = "Larry";
} 

这个也能够用 switch case 处理,不过引荐的要领是 hash 表:

var ceos = {"Apple":"Jobs", "microsoft":"Gates", "Google":"Larry"};
val = ceos[key];

3.重构,用 OO 内里的继续或许组合

1.假如是狗,则汪汪
2.假如是猫,则喵喵
3.假如是羊,则咩咩
4.假如是鸭,则嘎嘎

能够重构一下,改成 OO。

*定义类: 动物(或许接口)
*定义要领:叫
*定义子类:狗、猫、羊、鸭
*重写要领 ----  叫

也就是说将同的推断依据功用,写成函数,如许也便于浏览

比方我有一个要领依据范例猎取称号,用if else会如许

function getName(type) {
    if (type === 'monkey') {
        return 'monkey name';
    } else if (type === 'cat') {
        return 'cat name';
    } else {
        return 'dog name';
    }
}

假如写成函数,改成下面的会更好

function getName(type) {
    var data = {
        monkey: 'monkey name',
        cat: 'cat name',
        dog: 'dog name'
    }

    return data[type] ? data[type] : data['dog'];
}

硬要把设想形式添加到JS里不是不能够,然则要看状况。生搬硬套过来的东西然并卵啊。
写代码记着三个字即可,短浅易。代码短,读起来简朴,保护轻易,假如在机能和代码长度上二选一,我一定选代码短,机能不可,加台服务器就是了。而冗杂的代码并非加个顺序员就可以搞定的。

保持着这个心态写代码,写出的东西离设想形式也不会差太多了。

多说一句:存在必有其代价,不能说if else多了就不好,凡事无相对,合适A的未必就合适B,每一个东西都有其完成的场景。同理改写设想形式未必就是最棒的,听起来嵬峨上点罢了。

    原文作者:从小就爱跺跺跺
    原文地址: https://segmentfault.com/a/1190000004829656
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞