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

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学习与发展的干货

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

    推荐阅读
  • 怎么样让眼睛变大的最有效的方法(5种方法让你的眼睛变大)

    使用时先轻刷一层睫毛膏,趁睫毛膏尚未干掉时,将增长纤维的刷头转出,并将刷头上的白色细致纤维轻轻以滚动方式附着每根睫毛的尖端部位。再重复刷上黑头睫毛膏,电眼效果max。

  • 双减带给老师的挑战和机遇(双减之后教师面临的)

    7月24日,中共中央办公厅、国务院办公厅印发了《关于进一步减轻义务教育阶段学生作业负担和校外培训负担的意见》。面对教师陡然增加的负担,教育部相关负责人回应,将继续督促指导各地将教师减负工作同优化教师资源配置、深化教育教学改革等有机结合起来,健全教师减负长效机制,推动教师减负工作取得实效。“双减”政策明确提出,要构建教育良好生态,有效缓解家长焦虑情绪,促进学生全面发展、健康成长。

  • 我的世界橡胶甘蔗怎么杂交 我的世界粘性甘蔗种子

    杂交前需要合成作物架,用4个木棍合成,摆放成左右两列,合成2个作物架,由于杂交的几率比较低,所以需要准备多点作物架。拿着作物架在,每两个种了甘蔗的耕地的中间,放上两个作物架,作物架成十字交叉,代表此时在进行杂交。进行一段长时间的等待,等待甘蔗长大,等待杂交成功,注意杂交的地方很容易长杂草,如果长了杂草请尽快打掉,否则整个耕地都会蔓延杂草,需要重新杂交。

  • 娃哈哈新媒体营销策划(第13届娃哈哈营销策划大赛重磅来袭)

    为了丰富大学生的课余生活,引导和培养大学生创新精神和实践能力,4月23日18时30分,第十三届娃哈哈全国大学生营销策划大赛启动仪式于南宁职业技术学院大礼堂顺利举行。娃哈哈营销大赛为大学生提供了一个广阔的实践平台,推动教育与实践相结合,使同学们的创新意识得到激发。在此预祝娃哈哈营销策划大赛取得圆满成功,也祝本次参赛的团队都能够在比赛中取得佳绩!

  • 狮鹫怎么驯服(方舟生存进化手游狮鹫驯服技巧攻略)

    接下来我们就一起去研究一下吧!狮鹫怎么驯服方舟生存进化中狮鹫是高傲的守护兽,想要驯服狮鹫并不容易,必须获得狮鹫的尊重,这并不算容易的事,下面就来介绍一下怎么驯服狮鹫的方法吧。第一种方法:人物等级85级以上,并且不是可以获得全部尊重的!比如85级的,可能只能获取低等级狮鹫的尊重!

  • tabata间歇性训练的方法(什么是Tabata锻炼)

    各种研究得出结论,Tabata锻炼对健康有很多好处。有时您可能会达到最大强度,这可能会因肌肉松懈而导致受伤每周最多进行3-4次Tabata训练。Tabata锻炼以多种方式改善健康。此外,心脏病患者在开始Tabata锻炼之前还应听取医生的建议。在没有科学证据的情况下,对原始Tabata版本的修改可能弊大于利。人们可能会选择Tabata只是为了减肥,这不是它的实际用途。与传统HIIT相比,Tabata的强度水平更高,恢复时间更短。

  • s10和s9有什么区别(s10和s9有什么区别瑞思迈)

    vivoS9电池容量4000mAh,配置33W闪充。vivo官方宣布vivoS10系列于2021年7月15日正式发布,该手机代言人有Lisa、蔡徐坤、刘昊然。2021年7月15日,vivo召开了S10系列发布会,会上发布了新一代自拍旗舰vivoS10系列,其vivoS10系列依然采用了前置4400万像素AF双摄设计,仍然支持105度超广角,还有前置微缝式双柔光灯。

  • 专业版微博怎么设置(其实很简单)

    接下来我们就一起去了解一下吧!专业版微博怎么设置需要认证过才能成为专业版。专业版微博是为企业和机构定制的微博。新浪微博企业版是我们为企业、机构用户量身打造的服务平台。它具有更丰富的个性化页面展示功能设置,更精准的数据分析服务,以及更高效的沟通管理后台。我们期待新浪微博企业版能够帮助企业更便捷地与目标用户进行互动沟通,提升营销效果转化,挖掘更多商业机会。

  • 变速箱油到底多久换一次呢(变速箱油多久更换一次)

    如果需要更换变速箱油,查看用户的保养手册上如果有明确的更换周期,按照规定换油。如果变速箱油是终身免维护的,也一样要引起重视,终身免维护并不意味着变速箱油一直不用换。其实变速箱油不像机油那么黑,相比于机油甚至更为干净一点。所以车主千万不要忽略变速箱油,如果过长时间不更换,也会对变速箱造成一定的损伤,而且一些汽车的变速箱比发动机还要昂贵,修一次可能得要好几万元。

  • 恐惧症会遗传吗 幽闭恐惧症会遗传吗

    恐惧症是发病率非常高的一种心理疾病,而有许多患者并没有得到有效的治疗。导致恐惧症的因素恐惧症是各种因素的共同作用。恐惧症的典型症状是恐怖发作,并伴有强烈的生理反应。尽管患者知道这种恐惧是不合理的,但是没法控制。研究表明,在100名患者中40名患者可以彻底治疗,基本上没有什么后遗症。所以一定要及早治疗,效果好,造成的危害也小。