读《减少switch case语句的使用》有感
原文地址
http://log.fyscu.com/index.php/archives/269/
现在我是作为一个长者,给你们一些人生经验
原文
因为switch...case结构要求,在每一个case的最后一行必须是break语句
评:
并不是“必须break”,反而在实际编码中,经常少写一些break,以实现分类、聚合的功能
比如:
switch (day){
case '星期一':
case '星期二':
case '星期三':
case '星期四':
case '星期五':
return '工作日';
break;
case '星期六':
case '星期日':
return '假日';
break;
}
结论
啪!
原文
建议改写成对象结构
评
太恶心了!
用原本case的字符串来做对象成员,如果是 'baidu','腾讯','360' 呢?
switch本来的作用就是匹配变量不同的字符串,分流到不同的逻辑,可以说是这个个案里最理想的解决办法,
而用原文中的“面向对象”的方法,主要有如下问题:
1.总不能用中文key吧
2.不能聚合,除非先定义function,多个key指向同一个function,那样实际上更乱
3.当输入枚举增加,你就要修改object,违反了"开-闭 原则"(http://log.fyscu.com/index.php/archives/60/),不是一种好现象
4.垃圾回收的时候,如果返回值没有被释放,那么doAction即使已经执行完了,也会因此而不被回收,这种习惯有OOM的风险
5.如果有需要处理上下文中的变量,返回的function的参数表就会和业务耦合得很厉害(这一点自己领会)
6.凑数
结论
啪!啪!
小蓝说
其实switch...case 作为几乎所有语言基本语法的一部分,肯定是千锤百炼的,无需怀疑的,
一些忘记写break之类的问题,一方面多从自己身上找原因,理清思路才是真,
此外也可以换个好点的IDE,比如webstorm,设置一些代码模板,自动break。
而对于原文中的 object 方法,属于JS比较有特点的对象声明方式,我们尽量还是用比较通用化的办法,
积累的经验以后在其他语言也能用。