当前位置: 首页 > 科技观察

JavaScript重构技巧——降低函数复杂度

时间:2023-03-19 21:36:52 科技观察

本文转载自微信公众号“大千世界”,转载请联系大千世界公众号。JavaScript是一种易于学习的编程语言,很容易编写可以运行并执行某些操作的程序。但是,很难写出一段干净的JavaScript代码。在本文中,我们将研究如何“降低函数复杂性”。把重复的代码移到同一个位置我们应该把重复的代码提取出来,合并到同一个位置,这样当需要修改的时候,只需要改一个地方,同时降低错误率。假设我们可以编写如下代码:"p").style.color='red';}else{document.querySelector("p").style.color='green';}})document.querySelector("p")有两个,我们可以优化成这样,把document.querySelector("p")保存到一个变量中,然后使用这个变量,如下:constbutton=document.querySelector('button');constp=文档。querySelector("p");lettoggled=true;button.addEventListener('click',()=>{toggled=!toggled;if(toggled){p.style.color='red';}else{p.style.color='green';}}这样我们就不用写很长的document.querySelector("p")了,写一个变量p就可以了。另一个常见代码示例中的数字,我们很难仅仅通过看数字就知道数字的含义:letx=1;lety=1;letz=1;我们不知道上面三个是什么意思,所以我们可以去掉重复的代码,用一个合适的变量名来表示,如下:constnumPeople=1;letx=numPeople;lety=numPeople;letz=numPeople;这样我们就可以知道numPeople的值为1,代表人数。简化函数函数尽量简单,最好是做一件事情,行数不要太多,不要超过30行。我们不应该按照我们应该的方式使用ES5类,也不应该将“IIFE”用于模块或块。相反,我们应该使用类语法,其中可以在一个类中拥有该类的多个实例方法。这将大大减少函数的大小。此外,只要我们可以定义函数,函数就应该是纯函数,这意味着它们不应该有副作用。例如,最好的简单函数如下:constadd=(a,b)=>a+b;上面的函数没有任何副作用,因为它没有修改函数外的任何变量。另外,它也是一个纯函数,对于同样的输入,输出的结果也是一样的。使用guard语句代替嵌套语句guard语句的定义和用法:guard语句就是把一个复杂的条件表达式拆分成多个条件表达式,比如一个很复杂的表达式有好几层if-then-else嵌套语句转换成多个if语句来实现其逻辑。这些多个if语句是guard语句。有时条件表达式可能会嵌套n次才能真正执行。其他分支只是报告错误并返回。对于这种情况,应该单独检查报错返回的分支,当条件为真时会立即返回。这种单独的检查是保护条款。Guard子句可以将我们的视线从异常处理中解放出来,专注于正常的处理。在代码中。例如,我们可以编写如下代码:'string'){return`${greeting},${firstName}${lastName}`;}}}}我们可以优化constgreet=(firstName,lastName,greeting)=>{if(typeoffirstName!=='string'){thrownewError('firstnameisrequired');}if(typeolastName!=='string'){thrownewError('lastnameisrequired');}if(typeofgreeting!=='string'){thrownewError('greetingisrequired');}return`${greeting},${firstName}${lastName}`;}在第二个示例中,如果每个参数都不是字符串,则会抛出错误,从而消除嵌套的if语句。这在做同样的事情时将嵌套的if语句减少为没有嵌套的if语句。嵌套很难阅读和理解,我们应该到处摆脱它们。总结重复代码总是不好的。我们应该永远记住“不要重复自己(DRY)”的原则。另外,应该用一些新的方法来替代ES5时代。最后,嵌套的if语句应该替换为guard语句,因为它们执行与嵌套的if语句相同的检查,这样更容易阅读。