JavaScript是一种易于学习的编程语言,很容易编写可以运行并执行某些操作的程序。但是,很难写出一段干净的JavaScript代码。在本文中,我们将介绍一些与优化条件表达式相关的重构思想。分解条件表达式我们可以将长的条件表达式分解成命名的短条件表达式,这样方便阅读。比如我们可能会这样写代码:阅读,我们可以将其分解为几个简短且命名的条件表达式,如下所示:");letisMacIE=isMac&&isIE;组合条件表达式与上面相反,如果有多个短条件表达式,可以将它们组合成一个。例如,我们可能会这样写代码:constx=5;constbigEnough=x>5;constsmallEnough=x<6;constinRange=bigEnough&&smallEnough;我们可以这样合并:constx=5;constinRange=x>5&&x<6;简而言之,即使组合它们也不会使表达式变长,所以我们可以这样做。合并重复的条件片段如果我们在条件块中有重复的表达式或语句,我们可以将它们移出。比如我们可能会这样写代码:if(price>100){//...complete();}else{//...complete();}我们可以把重复的内容移出条件表达式,如下:if(price>100){//...}else{//...}complete();这样,我们就不必重复和不必要地调用完整的函数。删除控制标志如果我们在循环中使用了控制标志,应该是这样的代码:上面代码中的letdone=false;while(!done){if(condition){done=true;}//...},done是控制标志,当条件为真时,设置done为真,停止while循环。与上面相比,我们可以使用break来停止循环,如下所示:conditionalguardstatement就是将复杂的条件表达式拆分成多个条件表达式,比如嵌套了好几层if-then-else语句的非常复杂的表达式,将其转化为多个if语句,实现其逻辑。第一个if语句是guard语句。嵌套的条件语句很难阅读,所以我们可以使用“保护语句”来代替它们。例如,我们可能会这样写代码:constfn=()=>{if(foo){if(bar){if(baz){//...}}}}我们可以这样优化:if(!foo){return;}if(!bar){return;}if(baz){//...}}在上面的代码中,守卫语句是:if(!foo){return;}和if(!bar){return;}如果这些条件为假,它们会提前返回函数,所以我们不需要嵌套。我们可以使用switch语句为不同种类的数据创建相同的子类,然后针对不同类型的对象使用不同的方法,而不是使用switch语句对不同类型的数据进行相同的操作。例如,我们可以这样写代码:returngetBaseSpeed()*1.5}case('dog'):{returngetBaseSpeed()*2}default:{returngetBaseSpeed()}}}}我们可以这样重构:classAnimal{constructor(type){this.type=type;}getBaseSpeed(){return100;}}classCattextendsAnimal{getSpeed(){returnsuper.getBaseSpeed()*1.5;}}classDogeextendsAnimal{getSpeed(){returnsuper.getBaseSpeed()*2;}}当switch语句很长时,应该是不同类型的自定义案例块的对象。获取空对象如果我们反复检查null或undefined,我们可以定义一个子类来表示该类的null或undefined版本,并使用它来代替。例如,我们可能会这样写代码:classPerson{//...}我们可以这样重构:classPerson{//...}classNullPersonextendsPerson{//...}然后,我们将Person设置为null或undefined对象属性而不是将其设置为NullPerson实例。这消除了使用条件检查值的需要。JohnAu-Yeung来源:medium译者:FrontendXiaozhi原文:https://levelup.gitconnected.com/javascript-refactoring-conditionals-6d74a1138c96代码注意。转载请联系大千世界公众号。
