爱美容
当前位置: 首页 美容百科

else是可选的吗(是时候和else关键字说再见了)

时间:2023-06-18 作者: 小编 阅读量: 1 栏目名: 美容百科

但优秀程序员的标志是,不使用这个关键字。·其保证了主要的执行通道,且有着更少的特殊情况。·其迫使编程人员在每个函数开始时写入处理数据所需的所有条件。在这种模式下,开始考虑信号灯的可能状态,然后相应地隔离代码。·信号灯中定义的操作将行为委托给当前状态的对象。

全文共1754字,预计学习时长10分钟

图源:unsplash

没有程序员不知道else关键字,If-else几乎遍布于所有编程语言,这种简单的条件逻辑使所有人都很容易理解。

但优秀程序员的标志是,不使用这个关键字。

笔者在开始编程的时候,最大错误之一是在编写条件句时过度使用else关键字,早五年前笔者就告别else了。

原因何在呢?

想一下else是什么意思,其意为“如果满足A就执行这个,如果不满足A就执行那个”。

图源:bevnet

如果A是二进制,就不存在问题——因为只存在两种情况。

但是如果A是二进制变量的集合,或者包含着更大的变量,出现问题的机会就可能会出乎意料的大,且难以理解、测试和维护。

避免if/else if,只使用if语句,花时间确保if组的输入条件是互斥的,这样答案就不依赖于执行顺序了。

· 使用switch — case语句

· 使用多态性处理复杂的条件情况,使代码更像状态模式。

· 其保证了主要的执行通道,且有着更少的特殊情况。

· 其迫使编程人员在每个函数开始时写入处理数据所需的所有条件。

示例

例子是这样的:一个信号灯(即信号灯对象)有着三种不同的状态,红色、黄色和绿色,每种状态都有着其自己的一系列规则。规则如下:

· 假设信号灯目前是红色,则在一定延迟后,状态由红转绿。

· 然后在另一个延迟之后,状态由绿转黄。

· 短暂延迟后,状态由黄转红。

· 不断循环

图源:developer

不要使用if-else关键字

constlightState= { GREEN: 0, YELLOW: 1, RED: 2}varTrafficLight=function () {var count =0// default state = red var currentState =0;this.change=function(state) {if (count>= 10 ) returncurrentState = statethis.go(currentState) } this.go=function(state) {if (currentState ==LightState.GREEN) {console.log("Green -->for 1 minute")this.change(LightState.YELLOW)}elseif (currentState ==LightState.YELLOW) {console.log("Yellow -->for 10 seconds")this.change(LightState.RED)} elseif (currentState ==LightState.RED) {console.log("Red -->for 1 minute");this.change(LightState.GREEN)} else {throwError("Invalid State")} } this.start=function() {this.change(LightState.GREEN) }}

更简单的方式

来看看不用else该怎么做:

this.go=function (state) {if (currentState ==LightState.GREEN) {console.log("Green -->for 1 minute")this.change(LightState.YELLOW)}if (currentState ==LightState.YELLOW) {console.log("Yellow -->for 10 seconds")this.change(LightState.RED)}if (currentState ==LightState.RED) {console.log("Red -->for 1 minute");this.change(LightState.GREEN)}if (currentState != LightState.GREEN&& currentState != LightState.RED&& currentState != LightState.YELLOW) {throwError("Invalid State")}}

或者可以用一个switch代替,不得不合并不同的场景时,它看起来干净得多,而if-else很快就会失控。

若干场景良好的情况下,switch 语句可能会比if-else语句更快。

this.go=function (state) {if (currentState ==LightState.GREEN) {console.log("Green -->for 1 minute")this.change(LightState.YELLOW)}if (currentState ==LightState.YELLOW) {console.log("Yellow -->for 10 seconds")this.change(LightState.RED)}if (currentState ==LightState.RED) {console.log("Red -->for 1 minute");this.change(LightState.GREEN)}if (currentState != LightState.GREEN&& currentState != LightState.RED&& currentState != LightState.YELLOW) {throwError("Invalid State")}}

可以使用状态模式删除这些代码中的所有if-else关键字

图源:unsplash

在这里,引入了许多if-else block/switch语句来保护各种条件,这个状态模式适合这样的场景。它允许对象根据当前的状态有不同的行为,并且用户可以定义状态特定的行为。

在这种模式下,开始考虑信号灯的可能状态,然后相应地隔离代码。

· 对于状态特定的行为,需要有单独的对象。

· 信号灯中定义的操作将行为委托给当前状态的对象。

· 状态本身触发状态转换

信号灯:Green(1 minute) → Yellow (10 seconds)→ Red (1 minute)

varTrafficLight=function () {var count =0// default state =greenvar currentState =newGreen(this);this.change=function (state) {// limits number of changesif (count>= 10) return;currentState = state;currentState.go();}this.start=function () {currentState.go();} }varRed=function (light) {this.light= lightthis.go=function () {console.log(("Red -->for 1 minute"))light.change(newGreen(light));} }varYellow=function (light) {this.light= light;this.go=function () {console.log("Yellow -->for 10 seconds")light.change(newRed(light));} };varGreen=function (light) {this.light= light;this.go=function () {console.log("Green -->for 1 minute");light.change(newYellow(light));} };

输出如下:

Green → for 1 minuteYellow → for 10 secondsRed → for 1 minuteGreen → for 1 minuteYellow → for 10 secondsRed → for 1 minuteGreen → for 1 minuteYellow → for 10 secondsRed → for 1 minuteGreen → for 1 minuteYellow → for 10 seconds

好代码与糟糕代码的区别在哪,你get到了吗?

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

    推荐阅读
  • 听觉的秘密(听觉世界里的潜规则)

    鸡尾酒会效应说起大脑的能力强,至今,大脑在处理声音方面的一个功能还在让所有科学家惊叹,这个功能的神奇机制至今也还是个谜。这种功能有个有趣的名字,叫做“鸡尾酒会效应”。动物也展现鸡尾酒会效应最近的研究发现,很多动物的听觉系统也具有这种鸡尾酒会效应的功能,例如鸟儿们经常群集一起,叽叽喳喳开大会,但它们往往只是回应自己伴侣的叫声,显然它们能够从嘈杂的叽喳声中分辨出伴侣的声音。

  • 淄博环保供热第一供热分公司供暖范围在哪?

    淄博环保供热第一供热分公司供暖范围在哪?供暖小常识之暖气不热的具体排气方法:每个暖气片上都有一个手动排气阀,用户可轻轻拧松手动排气阀,听到排气声立即停止扭动排气阀,若见有稳定水流流出可将排气阀轻轻拧紧。排过气后,若暖气片还是不热,应请专业人员查明原因,帮助解决问题,切不可盲目放水。

  • 窗帘是什么材质 高精密窗帘是什么材质

    透明类的丝质面料,手感柔软、纹路流畅,用做窗帘,既浪漫又高雅。丝质窗帘最大的特点也是最明显的缺点就是价格昂贵,难以清洗。古代太后或皇后临朝听政,殿上用竹帘遮隔,则称为垂帘听政。

  • 普惠性幼儿园能否增加收费项目(普惠性幼儿园覆盖率将超过80)

    普惠性幼儿园覆盖率将超过80日前,陕西省教育厅和陕西省发改委联合印发了《陕西省教育事业发展“十四五”规划》,其中明确提出要强化学前教育规划建设,将新增公办园300所,公办园占比和公办园在园幼儿占比保持50%以上,普惠性幼儿园覆盖。

  • 林清玄人生感言(承担是生命里最美的东西)

    更令人赞叹的是,那个煮面的老板还边与顾客聊着闲天。对于孩子突如其来的谈话,我感到莞尔,并且立即坦然承认,我一定输给卖面的人。他们不用言语,而以动作表达了对生命的承担。在古印度人传统的观念里,认为只要是两条河交会的地方一定是圣地,这是千年智慧累积所得到的结论。当然,在我们以神圣的心面对世界时,自己就有了承担,也就成为值得敬佩的人之一。事实上,所有的比较都是一种执著。

  • 白花蛇舌草的功效与作用(白花蛇舌草的功效与作用效)

    白花蛇舌草一年生小草本,生于潮湿的田边、沟边、路旁和草地。白花蛇舌草药材全体扭成团块,灰绿色至灰棕色。白花蛇舌草补充信息:炮制:取原药材除去杂质,抢水洗净,稍润,切段,干燥。白花蛇舌草适合人群:孕妇慎用白花蛇舌草的功效和作用白花蛇舌草味苦、微甘,性微寒;入肺、肝、胃经;具有清热利湿,解毒抗癌的功效;主治肺热喘咳,咽喉肿痛,湿热黄疸,热淋涩痛,水肿,痢疾肠炎,肠痈,痈肿疮疡,毒蛇咬伤,癌肿。

  • 苏州西站长途汽车站停运通知(苏州市区79班汽车客运班线停班)

    苏州汽车客运总站表示,将给因台风造成停班班次的旅客办理免费退票。昆山客运中心站正密切关注“利奇马”的走向及发展趋势,动态调整班次开行方案并及时通知广大旅客相关停班信息,确保旅客安全出行。有去机场、高铁站、火车站换乘的旅客请适当增加出行时间,以免受台风影响耽误行程。如因天气原因导致班次停运,乘车人可在当天携带本人身份证持车票到车站窗口办理全额退票。

  • 二氧化碳用途(二氧化碳的用途)

    二氧化碳是我们很熟悉的一种气体,大量的二氧化碳会导致温室效应的加剧。学过生物的同学都知道,植物的光合作用是需要二氧化碳作为原料的。在很多农场里面,也会放置产生二氧化碳的仪器,提高农作物的产量。二氧化碳灭火器可用于扑灭图书、重要仪器的失火,因为扑灭后没有任何的残留物质。其实这种效果都是由人为用干冰造成的。以及人工降雨也都会用到二氧化碳等,用途广泛。

  • 桂林社保卡要自己去银行办吗(桂林社保卡要自己去银行办吗现在)

    制卡人1寸白底免冠深色上衣证件纸质彩色照片1张。如委托代办,需提供受委托人的居民身份证原件。填写社会保障卡制卡申领表。社会保障卡启用1.办理条件本统筹区已领取社会保障卡,但未激活社保功能的参保人员。广西区内转入已经持有社会保障卡的参保人员。

  • tvb五花是谁(深扒TVB五朵金花)

    根据港媒报道,杨怡与胡定欣在剧组拍摄期间已经有了两女相争的苗头。根据当时报道,吴卓羲公开表示,自己与徐子珊仅拍摄了一天电视剧,便成为了男女朋友,使得二人被视为最佳荧幕情侣。在此期间,黄宗泽与五花们合作过多部作品,荧幕情侣也是组合了一对又一对。此外,同样家庭事业双丰收的还有勤恳劳模杨怡。然而,现实生活中,与杨怡定情的却是在剧中饰演马国明弟弟的罗仲谦。杨怡仍然认定罗仲谦,并于2016年10月于英国完婚。