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

关于如何编写简洁代码的6个简单技巧

时间:2023-03-13 03:55:50 科技观察

编写简洁代码(CleanCode)并不是一件很容易的事。为了保持代码干净,您需要尝试不同的技术和实践。问题是关于这个主题的实践和技巧太多,需要大量重构。因此,开发人员很难为自己的项目选择最佳实践和技术。让我们简化这个任务,在本文中,我们将讨论编写干净代码的一些好处,然后查看我们总结的6个技巧和实践,以便开发人员了解一些最常用的编写干净代码的技巧。1.编写简洁代码的好处让我们先来看看编写简洁干净的代码的好处。主要好处之一是干净简洁的代码可以帮助我们最大程度地减少阅读和尝试理解代码所花费的时间。凌乱的编码风格具有不可思议的能力,可以提高开发人员的生产力并使他们的工作更加困难。代码越乱,开发人员维护它的时间就越多。此外,如果代码太混乱,维护开发人员可能会决定停止并重构它。1.1更容易开始和更容易继续让我用一个简单的例子来说明这一点。假设我们在很长一段时间后重新维护之前开发的一个项目。或许,是我们的一位老客户联系了我们,要求我们再次继续扩建和维护。现在,我们可以想象一下,如果在项目开发阶段,不是用cleancode的技术来写cleancode,而是写相反的代码。第一次,您将知道您的代码有多糟糕和混乱。而这个时候,你也会发现,维护一个之前的项目是多么的艰难。因此,我们现在不得不花更多的时间在这个项目上,因为我们需要重新理解我们之前写的代码。虽然这不是必需的,但我们可以通过坚持从一开始就编写干净的代码来完全避免它。现在我们不得不增加成本,如果我们决定从头开始,我们的旧代码会变得一团糟。我想这不是您的客户愿意听到的,因为它代表成本增加和工期延长。CleanCode不会有这样的问题,想象一下前面的例子,情况会恰恰相反。现在,我们之前的代码干净优雅。那么我们需要多长时间才能理解它呢?也许就几分钟,简单地阅读代码并了解它之前是如何工作的。最后,在此基础上,我们花一段时间维护或扩展新的功能。这种改变所投入的成本和时间会小很多,我们的客户甚至可能不会注意到你做了什么。这是我们讨论坚持使用CleanCode编码技巧的第一个好处的地方。而且,它不仅适用于我们自己维护的项目,也适用于其他开发人员。CleanCode使我们能够更快地开始,我们和其他开发人员都不需要花费数小时来研究它。我们可以更快地开始工作。1.2更容易让团队中的人加入CleanCode的另一个好处与第一个原因密切相关,它将加快新人接手项目的速度。我的意思是,假设我们需要雇用另一个开发人员,需要多长时间才能理解代码并学习如何使用它?看情况,如果我们的代码本身很乱,写得不好,他就需要更多的时间来完成第一次接管。而如果我们的代码保持简洁易读,就会非常容易理解,那么他就可以更快的接手,开始写新的需求。有些人可能会觉得这不是问题,因为我们作为作者还在,我们可以帮助他更快地理解,虽然这确实可以加快他的入职速度。但是,我们的帮助应该只是很短的时间,一天或两三天,而不是一周或非常频繁。当我们决定聘请另一名开发人员时,是为了加快我们的项目开发,而不是放慢速度。我们的目标不是帮助他学习如何在我们之前编写的代码之上继续编码,这会浪费我们更多时间。1.3更容易保持规范我们需要注意的一件事是了解和学习如何编码是一回事。然而,这仅仅是开始,我们还需要确保开发人员能够并愿意遵循我们的编码标准,并在项目中继续实践。这将使项目始终保持干净整洁,而不会变得混乱。这一点很重要,因为我们不仅要写出干净的代码,还要维护这样的代码,不管以后有多少人来维护,我们都需要长期坚持和思考这个问题。最后,如果我们团队中的一位开发人员决定不遵循当前的编码标准怎么办?通常这个问题会自行解决。假设我们有一组人在处理相同的项目代码,并开始偏离既定的代码约定。这可能导致三个方向的发展。首先,团队其他人推动开发人员遵循标准,如果他不想离开团队,他就会接受。第二个方向是开发人员能够说服团队的其他成员采用并遵循他的编码标准。如果开发人员提出更简洁的编码标准,从而带来更好的结果,那应该是一件好事。编写并保持我们的代码干净并不意味着我们应该忽略任何改进它的机会。恰恰相反,我们认为我们应该始终质疑我们当前的做法并寻求改进的机会。所以,如果一个开发者偏离了我们的想法,而他的做法更好,在这种情况下,我们做出改变,而不是让他改变,可能是最好的结果。我认为在我们审视并尝试之前,我们不应该忽视其他人的方法。总有改进的余地,我们应该不断寻找改进的方法,而不是墨守成规。最后是我们最不想看到的,开发者决定不采用我们的规范,也不会试图说服我们采用他的规范。这可能导致他离开球队。2.编写整洁代码的一些建议在我们讨论编写整洁代码的一些好处之前,是时候学习一些技巧来帮助我们做到这一点了。正如我们将要看到的,拥抱干净的代码并遵循这些建议来实践。我们总结的这些实践将使我们的代码更清晰、更易读、更简单、更容易理解。当然,您不需要练习所有这些建议,练习并遵循一两个就足以编写出有效的结果。2.1使代码可读是的,我们写的代码最终会被机器解释。然而,这并不意味着我们应该忽视它的可读性和可理解性。总会有另一个开发人员有机会阅读我们的代码,否则将无法维护它。即使我们作为独立开发者坚持自己维护代码,我们可能会在未来继续维护我们的项目。由于这些原因,我们应该保持代码的可读性。最简单的方法就是用空格格式化,把代码压缩(混淆)后再发布就可以了。但是我们不需要编写看起来像是压缩过的代码。相反,我们可以使用缩进、换行符和空行来使代码的结构更具可读性。当我们决定采用这种方法时,我们代码的可读性和可理解性可以得到显着提高。接下来看一下我们的示例代码,你应该就能看懂了。Code1://BadconstuserData=[{userId:1,userName:'AnthonyJohnson',memberSince:'08-01-2017',fluentIn:['English','Greek','Russian']},{userId:2,userName:'AliceStevens',memberSince:'02-11-2016',fluentIn:['English','French','German']},{userId:3,userName:'BradleyStark',memberSince:'29-08-2013',fluentIn:['捷克语','英语','波兰语']},{userId:4,userName:'HirohiroMatumoto',memberSince:'08-05-2015',fluentIn:['中文','English','German','Japanese']}];//BetterconstuserData=[{userId:1,userName:'AnthonyJohnson',memberSince:'08-01-2017',fluentIn:['English','Greek','Russian']},{userId:2,userName:'AliceStevens',memberSince:'02-11-2016',fluentIn:['English','French','German']},{userId:3,userName:'BradleyStark',memberSince:'29-08-2013',fluentIn:['Czech','English','Polish']},{userId:4,userName:'HirohiroMatumoto',memberSince:'08-05-2015',fluentIn:['中文','英文','德文','日文']}];Code2://BadclassCarouselLeftArrowextendsComponent{render(){return();}};//BetterclassCarouselLeftArrowextendsComponent{render(){返回();}};2.2给变量、方法起有意义的名字让我们看第二个技巧,它会帮助我们写出易于理解的代码。这个技巧是关于给变量、函数和方法起有意义的名字。有意义的是什么意思?有意义的名称是具有描述性的名称,不仅仅是我们,其他人也可以通过名称来理解这些变量、函数和方法的用途。换句话说,名称本身应该能够暗示变量、函数和方法的用途的,或者它包含的内容。让我们看一个例子。//Badconstfnm='Tom';constlnm='Hanks'constx=31;constl=lstnm.length;constboo=false;constcurr=true;constsfn='Rememberthename';constdbl=['1984','1987','1989','1991'].map((i)=>{returni*2;});//BetterconstfirstName='Tom';constlastName='Hanks'constage=31;constlastNameLength=lastName.length;constisComplete=false;constisCurrentlyActive=true;constsongFileName='Rememberthename';constyearsDoubled=['1984','1987','1989','1991'].map((year)=>{returnyear*2;});但是,我们应该知道,使用描述性名称并不意味着我们可以随意使用我们想要描述的词语。一个好的经验法则是将名称限制为三个或四个单词。如果我们需要四个以上的词来描述它,也许我们试图让它一次做太多事情,我们应该简化我们的代码而不是坚持使用它。2.3让一个函数或方法只执行一个任务当我开始写代码的时候,我曾经写过类似瑞士军刀的函数和方法。他们可以处理和做任何事情。但是在后期,这样做的后果之一就是很难找到一个好的名字来扩展它。其次,除了我,几乎没有人知道这个那个函数是什么,怎么用,有时我自己也会遇到这个问题,所以我不得不写笔记。第三,这些功能是不可预测的,因此我会写一段乱七八糟的代码。然后,有人提出了一个很好的建议,让每个函数或方法只执行一个任务。这个简单的建议改变了一切,帮助我编写了简洁明了的代码,至少比以前更干净了。从那一刻起,其他人终于能够看懂我的代码了。换句话说,他们不需要像以前那样花那么多时间来理解我的代码。我的功能和方法也变得可预测。给定相同的输入,它们总是产生相同的输出。此外,命名更容易。如果您在为您的函数和方法找到描述性名称时遇到困难,或者您需要编写冗长的注释以便其他人可以使用它们,请考虑使用单一职责。让每个函数或方法只执行一项任务。如果您的函数和方法看起来像一把瑞士军刀,您也可以实现它。相信我,在编写代码时,任何多功能性都不是优势。随时都可能适得其反,这是相当不利的。注意:让每个函数或方法只执行一项任务的做法称为单一职责原则。RobertC.Martin将这种编码实践作为五项面向对象设计原则(也称为SOLID)之一进行介绍。//Exampleno.1:简单的减法函数subtract(x,y){returnx-y;}//Exampleno.1:简单的乘法函数multiply(x,y){returnx*y;}//Exampleno.1:DoublenumbersinarrayfunctiondoubleArray(array){returnarray.map(number=>number*2)}2.4写好注释无论是对于我们的变量、函数还是方法,我们都绞尽脑汁想出有意义的名字。我们的代码本身可能还有一些不清楚或者难以理解的地方。可能是有一些逻辑分支需要单独解释,这些可能不是难于理解和使用的原因。相反,它可能只是一些历史遗留问题。有时我们可能不得不采取非常规的方法来解决问题,因为没有其他方法可以解决问题,或者我们没有足够的时间想出更好的解决方案。这很难用代码解释。在我们的代码中添加注释可以帮助我们解决这个问题。注释可以帮助我们向其他人解释为什么我们写了这段不合规的代码,以及我面临的问题和情况。这样其他人在阅读时就很清楚,不必猜测我当时在想什么。更重要的是,当我们解释我们的原因时,其他人可能会找到更好的方法来解决问题并改进代码。这是可能的,因为他们可能知道问题是什么以及期望的结果是什么。没有这些信息,其他人就很难创建更好的解决方案。否则,其他人不会尝试优化它,因为他们看不到它的必要性,他们可能认为这就是我们真正的想法。因此,当我们发现自己处于决定使用一些非常规方式、快速修复或变通方法来解决问题的情况时,我们应该使用评论来解释我们为什么面临什么问题以及为什么。做。最好用一两条评论来解释它,而不是强迫别人猜测。也就是说,我们应该只在必要的时候使用注释,而不是为了解释错误的代码。不断地添加注释并不能帮助我们把写得不好的代码变成干净简洁的代码。如果代码不好,我们应该通过改进代码来解决问题,而不是通过添加有关代码使用方式的评论。干净的代码优先于使用注释的解释。2.5保持一致当我们发现一种特定的编码习惯或我们喜欢的风格时,我们应该坚持并在任何地方使用它。在不同的项目中使用不同的编码约定或风格并不是一个好主意。它几乎与不使用任何编码约定或样式一样无用。结果,回到我们的旧代码将不会那么顺利和自然。我们仍然需要一些时间来了解我们在这个项目上使用的编码约定,然后才能使用它。最好的办法是选择一组编码约定,并在我们所有的项目中坚持使用它们。然后,回到我们以前的代码并从我们停止或改进的地方继续会更容易。尝试新的编码实践是一件好事。它帮助我们找到更好的工作方式。但是,在选择编码标准时,我们应该多尝试,并在多个地方实际使用它。我们应该努力验证我们的规范,以确保它完全适合我们,并且只有当我们对它感到满意时,我们才应该实施它。并且在所有的项目中,都使用这套规范。2.6定义检查代码,适时重构这是我写干净代码的最后一个技巧。简单地编写干净的代码并不是一切。当我们以干净的风格编写代码时,我们的工作并没有结束。下一步是保持我们的代码干净。干净的代码需要维护。我们在写代码的时候,要定期回头检查,清理垃圾代码,进行改进。否则,如果我们不审查和更新旧代码,它很快就会过时。就像我们的硬件设备一样。如果我们想让它们保持最佳状态,我们需要定期更新它们。对于我们每天使用的代码来说尤其如此。代码倾向于变得更加复杂和凌乱,而不是简单和干净。我们希望防止这种情况发生并保持我们的代码干净。做到这一点的唯一方法是定期审查我们的代码。换句话说,我们需要维护它。对于我们不再关心或没有未来的项目,这可能没有必要。对于重要的项目,维护是我们工作的一部分。3.编写CleanCode的小结本文即将结束。我们今天讨论的六种做法可能不是影响最大或结果最显着的。但是,它们是经验丰富的开发人员最常提到的。这就是我选择它们的原因。我希望这些实践或技巧足以让您开始编写干净的代码。现在,就像所有事情一样,最重要的是开始。因此,至少选择一项练习并尝试一下。【本文为专栏作家“张扬”原创稿件,转载请微信♂联系作者获得授权】点此查看作者更多好文