减轻阅读负担,激发创意思维,轻松学习JavaScript技能,每天,jym,rush~1.我们经常用数字来定义数字为常量,比如下面代码:constisOldEnough=(person)=>{returnperson.getAge()>=100;}谁知道这个100指的是什么?我们通常需要结合函数的上下文来推测判断这个100可能代表什么值。如果这样的数字不止一个,很容易造成更大的混乱。这个问题可以很明确的解决:constAGE_REQUIREMENT=100;constisOldEnough=(person)=>{returnperson.getAge()>=AGE_REQUIREMENT;}现在,通过声明常量的名称,我们可以立即理解100是“年龄要求”。修改时也能快速定位,一次修改多处生效。2.避免使用布尔值作为函数参数将布尔值作为参数传入函数是一种常见的写法,很容易造成代码混乱。constvalidateCreature=(creature,isHuman)=>{if(isHuman){//...}else{//...}}作为参数传递给函数的布尔值不能表达明确的意思,它只能告诉读者,这个函数会做出判断,产生两种或多种情况。但是,我们提倡函数单一职责的原则,所以:constvalidatePerson=(person)=>{//...}constvalidateCreature=(creature)=>{//...}3.将多个条件封装在我们通常这样写代码:if(person.getAge()>30&&person.getName()==="simon"&&person.getOrigin()==="sweden"){//...}不是没有,只是时间久了,你会突然不明白这些判断是干什么用的,所以建议用变量或者函数封装这些条件。constisSimon=person.getAge()>30&&person.getName()==="西蒙"&&person.getOrigin()==="瑞典";if(isSimon){//...}or:constisSimon=(person)=>{return(person.getAge()>30&&person.getName()==="simon"&&person.getOrigin()==="sweden");};if(isSimon(person)){//...}哦,原来这些条件是用来判断这个人是不是Simon的~这样的代码是声明式的代码,比较简单读书。4.避免负面判断。在条件判断中,使用否定判断会造成额外的思考负担。例如,在下面的代码中,条件!isCreatureNotHuman(creature)被双重否定,这使得阅读起来有点费力。constisCreatureNotHuman=(creature)=>{//...}if(!isCreatureNotHuman(creature)){//...}重写成下面的写法,方便阅读,虽然这只是一小部分trick,但是在大量的代码逻辑中,很多地方遵循这个原则肯定会有帮助。大多数时候,阅读代码只是阅读和阅读。当你看到一个“烂”的写法,你就看不下去了。constisCreatureHuman=(creature)=>{//...}if(isCreatureHuman(creature)){//...}5.避免大量的if...else...这一点一直被强调:例如下面的代码:if(x===a){res=A}elseif(x===b){res=B}elseif(x===c){res=C}elseif(x===d){//...}重写为地图:letmapRes={a:A,b:B,c:C,//...}res=mapRes[x]另一个例子是下面的代码:constisMammal=(creature)=>{if(creature==="human"){returntrue;}elseif(creature==="dog"){返回真;}elseif(creature==="cat"){returntrue;}//...returnfalse;}重写为数组:constisMammal=(creature)=>{constmammals=["human","dog","cat",/*...*/];returnmammals.includes(creature);}所以,当代码中有很多if...else...的时候,想想能不能稍微修改一下,让代码看起来更“干净”。小结以上技巧在例子中可能显得微不足道,但在实际项目中,当业务逻辑变得复杂、代码量变大时,这些技巧一定会起到积极的作用、帮助,甚至超乎想象。
