今天给各位分享else是什么意思的知识,其中也会对是时候和else关键字说再见了进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
1、全文共1754字,预计学习时长10分钟
2、没有程序员不知道else关键字,If-else几乎遍布于所有编程语言,这种简单的条件逻辑使所有人都很容易理解。
3、但优秀程序员的标志是,不使用这个关键字。
4、笔者在开始编程的时候,最大错误之一是在编写条件句时过度使用else关键字,早五年前笔者就告别else了。
5、想一下else是什么意思,其意为“如果满足A就执行这个,如果不满足A就执行那个”。
6、如果A是二进制,就不存在问题——因为只存在两种情况。
7、但是如果A是二进制变量的集合,或者包含着更大的变量,出现问题的机会就可能会出乎意料的大,且难以理解、测试和维护。
8、避免if/elseif,只使用if语句,花时间确保if组的输入条件是互斥的,这样答案就不依赖于执行顺序了。
9、·使用多态性处理复杂的条件情况,使代码更像状态模式。
10、·其保证了主要的执行通道,且有着更少的特殊情况。
11、·其迫使编程人员在每个函数开始时写入处理数据所需的所有条件。
12、例子是这样的:一个信号灯(即信号灯对象)有着三种不同的状态,红色、黄色和绿色,每种状态都有着其自己的一系列规则。规则如下:
13、·假设信号灯目前是红色,则在一定延迟后,状态由红转绿。
14、·然后在另一个延迟之后,状态由绿转黄。
15、不要使用if-else关键字
16、constLightState={\nGREEN:0,\nYELLOW:1,\nRED:2\n}\nvarTrafficLight=function(){\nvarcount=0\n//defaultstate=red\nvarcurrentState=0;\nthis.change=function(state){\nif(count++>=10)return\ncurrentState=state\nthis.go(currentState)\n}\nthis.go=function(state){\nif(currentState==LightState.GREEN){\nconsole.log("Green-->for1minute")\nthis.change(LightState.YELLOW)\n}\nelseif(currentState==LightState.YELLOW){\nconsole.log("Yellow-->for10seconds")\nthis.change(LightState.RED)\n}elseif(currentState==LightState.RED){\nconsole.log("Red-->for1minute");\nthis.change(LightState.GREEN)\n}else{\nthrowError("InvalidState")\n}\n}\nthis.start=function(){\nthis.change(LightState.GREEN)\n}\n}
更简单的方式
17、this.go=function(state){\nif(currentState==LightState.GREEN){\nconsole.log("Green-->for1minute")\nthis.change(LightState.YELLOW)\n}\nif(currentState==LightState.YELLOW){\nconsole.log("Yellow-->for10seconds")\nthis.change(LightState.RED)\n}\nif(currentState==LightState.RED){\nconsole.log("Red-->for1minute");\nthis.change(LightState.GREEN)\n}\nif(currentState!=LightState.GREEN&¤tState!=LightState.RED&¤tState!=LightState.YELLOW){\nthrowError("InvalidState")\n}\n}
或者可以用一个switch代替,不得不合并不同的场景时,它看起来干净得多,而if-else很快就会失控。
18、若干场景良好的情况下,switch语句可能会比if-else语句更快。
19、this.go=function(state){\nif(currentState==LightState.GREEN){\nconsole.log("Green-->for1minute")\nthis.change(LightState.YELLOW)\n}\nif(currentState==LightState.YELLOW){\nconsole.log("Yellow-->for10seconds")\nthis.change(LightState.RED)\n}\nif(currentState==LightState.RED){\nconsole.log("Red-->for1minute");\nthis.change(LightState.GREEN)\n}\nif(currentState!=LightState.GREEN&¤tState!=LightState.RED&¤tState!=LightState.YELLOW){\nthrowError("InvalidState")\n}\n}
可以使用状态模式删除这些代码中的所有if-else关键字
20、在这里,引入了许多if-elseblock/switch语句来保护各种条件,这个状态模式适合这样的场景。它允许对象根据当前的状态有不同的行为,并且用户可以定义状态特定的行为。
21、在这种模式下,开始考虑信号灯的可能状态,然后相应地隔离代码。
22、·对于状态特定的行为,需要有单独的对象。
23、·信号灯中定义的操作将行为委托给当前状态的对象。
24、信号灯:Green(1minute)→Yellow(10seconds)→Red(1minute)
25、varTrafficLight=function(){\nvarcount=0\n//defaultstate=green\nvarcurrentState=newGreen(this);\nthis.change=function(state){\n//limitsnumberofchanges\nif(count++>=10)return;\ncurrentState=state;\ncurrentState.go();\n}\nthis.start=function(){\ncurrentState.go();\n}\n}\nvarRed=function(light){\nthis.light=light\nthis.go=function(){\nconsole.log(("Red-->for1minute"))\nlight.change(newGreen(light));\n}\n}\nvarYellow=function(light){\nthis.light=light;\n\nthis.go=function(){\nconsole.log("Yellow-->for10seconds")\nlight.change(newRed(light));\n}\n};\nvarGreen=function(light){\nthis.light=light;\n\nthis.go=function(){\nconsole.log("Green-->for1minute");\nlight.change(newYellow(light));\n}\n};
输出如下:
26、Green→for1minute\nYellow→for10seconds\nRed→for1minute\nGreen→for1minute\nYellow→for10seconds\nRed→for1minute\nGreen→for1minute\nYellow→for10seconds\nRed→for1minute\nGreen→for1minute\nYellow→for10seconds
好代码与糟糕代码的区别在哪,你get到了吗?
27、我们一起分享AI学习与发展的干货
28、如转载,请后台留言,遵守转载规范
文章到此结束,如果本次分享的else是什么意思和是时候和else关键字说再见了的问题解决了您的问题,那么我们由衷的感到高兴!