前端中的if/else

在编写业务代码的时候,经常会出现条件判断,如果判断条件众多,就会出现if/else天梯,如果新的业务场景出现,就需要再添加一个if/else,这样的代码维护起来,简直是灾难。if (status === 0) {

//do something

} else if (status === 1) {

//do something

} else if (status === 2) {

//do something

} else if (status === 3) {

// do something

}

如果新的业务场景出现,status === 4,那就需要再写一个if else,这样的代码可读性太差了。简单if/else ----> 三元表达式

我们先从最简单的方式if/else进行改写

场景:if (status === 0) {

action()

} else {

do();

}

像上面的状态判断,其实是没有必要的,那么如何进行判断的改写呢?

消除else

上面的else没有什么必要if (status === 0) {

action()

}

do();

使用三元表达式status === 0 ? action() : do()

这样是不是更加简洁?毫无疑问if/else 天梯转变为switch 天梯

经过了简单的if/else,那么我们来看一下,多重if/else如果进行改写?可以通过switch进行改良代码switch (status) {

case 0:

// ...

case 1:

// ...

case 2:

// ...

default:

//...

}

但是这样无非只是将if else转变为了switch,提高了代码的可读性。当遇到新的场景的时候,还是需要到switch里面去修改对应的代码。使用map,将代码配置化定义一个map,里面存储对应的状态和对应状态的操作const statusMap = new Map([

[0, doStatusZero],

[1, doStatusOne],

[2, doStatusThree]

]);

// 当遇到对应的状态的时候,只需要

statusMap.get(status)();

如果可以的化,可以将配置文件抽离,形成一个配置文件,如果有新的状态改变,只需要改变配置文件就ok了。匹配对应的规则

使用map的好处,是代码可行性和整洁性提高了一个层次,但是只适用于一个单一的判断规则。如果具备多个判断的时候怎么办?假如一个判断是这样的,if(status === 0 && done === true && success == true), 那这样map简单配置的方式就不可以了,那既然简单不行,那就来电稍微复杂点的呗。本质上if/else逻辑是一种状态匹配,转变为计算机的方式就是模式匹配,单一的模式不能满足需要,那就创建一个多元模式匹配。

场景:需要判断三种状态 status/done/success

多元状态匹配,需要进行两步操作

判断状态是否匹配

匹配完成要完成的动作

基于上面两种行为,我们将map抽象为下面的方式const judgeMap = new Map([

[

(status, done, success) => status === 0 && done === 1 && success === 1,

() => {

// do something

}

],

[

(status, done, success) => status === 1 && done === 1 && success === 1,

() => {

// do something

}

]

]);

for (let [rule, action] of judgeMap) {

rule(status, done, success) && action()

}

总结其实整个思想来源于表驱动法,使用表数据,存储对应的状态处理。其中表的概念,不局限于一个简单的map也可能是一个数组或者对象甚至是一个字符串,表的结构可以自己定义。

尚硅谷【官网】谷粉与老学员为你推荐的Java培训|大数据培训|前端培训|Python培训​www.atguigu.com

gridview 中使用 if else_前端代码中如何优化if/else相关推荐

  1. APPium连接真机输入框中输入的内容与代码中不一致

    今天解决了上一个问题,又碰到了一个新的问题. 问题:连接真机输入框中输入的内容与代码中不一致. 描述: 想实现登录页面输入用户名和密码自动登录,可是在输入用户名和密码的框中输入的内容总是与代码中的不一 ...

  2. linux在代码中表示什么意思,Linux代码中的unlikely和likely分别是什么意思?

    Linux代码中的unlikely和likely分别是什么意思? 我在Linux代码中没有找unlikely和likely的定义. 在源代码中搜索出来很多无法找. 请各位赐教! 谢谢! | 内核里有很 ...

  3. python中degree什么意思_Python代码中degrees()函数有什么功能呢?

    摘要: 下文讲述Python代码中degrees()函数的简介说明,如下所示: degrees()函数功能 用于将弧度值转换为对应的角度 degrees()函数语法 math.degrees(x) - ...

  4. python中tan怎么表示_Python代码中tan()函数有什么功能呢?

    摘要: 下文讲述Python代码中tan()函数的简介说明,如下所示: tan()函数功能 用于计算出x 弧度-所对应的的正切值 tan()函数语法 math.tan(x) ---------参数说明 ...

  5. python中format函数作用_Python代码中format函数具有哪些功能呢?

    摘要: 下文讲述Python代码中format函数的功能说明,如下所示: format函数功能说明 format函数功能: 用于格式化字符串 format函数语法: format采用{} 和 : 来代 ...

  6. html中圆形单元格,HTML代码中关于table的边框控制以及单元格艰巨

    HTML代码中关于table的边框控制以及单元格艰巨 (2011-06-22 14:37:36) 标签: 南国 鹿灵子鹿胎膏 杂谈 1.若有一个1行1列的表格,设放table属性,使患上他的右.上两条 ...

  7. HTML 5中SEO可以用那些代码来做优化

    头部代码 1.标题标签(title标签) 在HTML5中标题标签依然存在,其仍然具有不可替代的作用;不过我们看到还有更多的可供搜索引擎识别的代码,我们将改代码的等级微降. 2.元标签(meta标签) ...

  8. js中加载指定的html代码,在js或JQuery中怎样判断页面html代码中含有指定名称的div元素...

    在我们制作网页的过程中,想要在某个页面中的某一元素中添加新的内容,而不想改动那个页面,我们一般会直接在全局的jsz中直接加入document.getElementById("指定id&quo ...

  9. html文本显示状态代码中,HTML文本显示状态代码中,表示?

    文本如何大小判别偏心受压剪力墙的. 能源能量然资提供的自是指源,显示如(,显示能.能.能.能..热等的械能是机生物原子光能化学总称,不可能源然界的一可再生能于自源可源和再生分为存在次能. 状态中表并发 ...

最新文章

  1. Python编程神器Jupyter Notebook使用的28个秘诀(附代码)
  2. SQL语句修改字段类型与第一次SQLServer试验解答
  3. raid0、raid1、raid5、raid10 flash
  4. Exchange邮箱的创建与配置
  5. mybatisplus查询今天的数据_springboot集成mybatisPlus
  6. Android:Android Studio生成签名文件,自动签名,以及获取SHA1和MD5值
  7. 14万程序员挑战过的算法趣题
  8. 《黑客帝国》观后感之我所理解的地球矩阵
  9. 斐讯K2 V22.X.X.X 新版固件 刷机教程 (开telnet,安装SSH,adbyby,刷breed,华硕Padavan)
  10. 微信广告数据源创建查询与上报-PHP
  11. SCI收录期刊——遥感学科
  12. 层次分析法详解(matlab)
  13. 关于程序化交易 这篇文章说透了
  14. Windows小技巧 -- 已连接wifi密码查看
  15. JavaScript与JScript的区别
  16. 微软 Windows 10 Version 2004 新功能盘点:分离Cortana,数项体验升级,抢先体验
  17. 项目突发事件识别_当突发事件发生时,您要做的就是文化
  18. Latex——属于符号
  19. sklearn专题六:聚类算法K-Means
  20. Qt源码解析之QThread

热门文章

  1. 使用fbs打包pyqt5本人亲自尝试过的
  2. mobilenet精髓全力解析,全力迁移到别的网络
  3. 聊聊 scala 的模式匹配
  4. iPhoneX快速适配,简单到你想哭。
  5. 位运算和典型应用详解
  6. 云计算时代的网络安全
  7. .NET chart 毫秒级坐标轴
  8. 基于SSM实现保健院管理系统
  9. 雷林鹏分享:jQuery EasyUI 数据网格 - 创建页脚摘要
  10. eclipse中各种查找