摘要
在开发中,我们经常要写 if…else 来判断条件。但是过多的 if…else 会让代码变得冗长难懂不好维护,有什么好方法呢?让我们来听个故事!
正文
故事开始
小白是一名 CocosCreator 程序员,任务是在游戏开发组组长的带领下开发一款游戏。一天,组长发来了一个任务,让小白来处理他传过来的角度值,判断区域。
小白心喜:哈哈,我刚看完的 TypeScript 枚举写法正好用上了!小白整理了一下思路:
“我应该先定义一个区域枚举,组长说是四个区域”
enum Area { A = 0, B, C, D }
|
“然后写一个方法来判断传入的角度”
public getArea (degree: number): Area { if (degree >= 0 && degree < 90) { return Area.A; } else if (degree >= 90 && degree < 180) { return Area.B; } else if (degree >= 180 && degree < 270) { return Area.C; } else { return Area.D; } }
|
“最后接收返回值打印就好了”
public onLoad (): void { let degree: number = 150; let area: Area = this.getArea(degree); if (area === Area.A) { console.log("A 区"); } else if (area === Area.B) { console.log("B 区"); } else if (area === Area.C) { console.log("C 区"); } else { console.log("D 区"); } }
|
回炉重造
高兴的小白连着测试了几个角度值都正确,他就愉快的提交到 Git 然后去吃午饭。但是没让他想到的是,下午刚回到公司组长就找他谈话:小白,你这代码不行!回去重写,不许出现 if…else!
“什么?你不让我用 if…else 了!!!”终究小白只是心中吼了一下,没敢喊出来。他灰溜溜的回去看自己的代码,却也没个头绪。
这时,他的同事小黑看到了愁眉苦脸的小白问怎么了。待了解了事情的原委后,小黑哈哈一笑:我要是组长我也说你,你这样写代码,如果碰到了 16 个区域判断你要写 16 个 if…else 吗?你难道忘了你学过的数组结构了吗?
小白猛的一拍大腿,对啊!!!
“打印区域用数组改写”
public onLoad (): void { let degree: number = 150; let area: Area = this.getArea(degree); let areaList: string[] = ["A 区", "B 区", "C 区", "D 区"]; console.log(areaList[area]); }
|
“角度判断改写”
public getArea (degree: number): Area { const EveryAreaDegree: number = 90; let index: number = Math.floor(degree / EveryAreaDegree); let degreeArray: Area[] = [Area.A, Area.B, Area.C, Area.D]; return degreeArray[index]; }
|
字符串枚举
这回小白总算是过关了。小白事后请小黑吃了顿大餐!
在工作之余,小白自己还测试了下字符串枚举。
enum Area { A = "a", B = "b", C = "c", D = "d" }
|
同理,不过是换成对象
public onLoad (): void { let degree: number = 150; let area: Area = this.getArea(degree); let areaList: object = { "a": "A 区", "b": "B 区", "c": "C 区", "d": "D 区" }; console.log(areaList[area]); }
|
故事到这里就结束了,小伙伴们有没有有所感悟呢?
O(∩_∩)O~~
结语
if 虽好,可不要贪杯哦!
O(∩_∩)O~~
微信公众号
