首页 » 小蓝 » 读《减少switch case语句的使用》有感

读《减少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比较有特点的对象声明方式,我们尽量还是用比较通用化的办法,
积累的经验以后在其他语言也能用。