手机企业网站如何建设,网站用什么软件做败sp,颍上网站建设,公司建网站软件(本文转载自其他博主但是个人忘记了出处)
优质代码是什么#xff1f;
优质代码是指那些易于理解、易于维护、可读性强、结构清晰、没有冗余、运行效率高、可复用性强、稳定性好、可扩展性强的代码。
这类代码不仅能够准确执行预期功能#xff0c;同时也便于其他开发者理解…(本文转载自其他博主但是个人忘记了出处)
优质代码是什么
优质代码是指那些易于理解、易于维护、可读性强、结构清晰、没有冗余、运行效率高、可复用性强、稳定性好、可扩展性强的代码。
这类代码不仅能够准确执行预期功能同时也便于其他开发者理解和修改。
这类代码通常会遵循一定的设计模式和编程规范拥有清晰的逻辑结构和规范的代码格式且注释适量且恰当。
优质代码该具备什么条件
1、轻量级
轻量级的代码主要是指代码的复杂性低易于理解和维护。
这一般通过减少代码的冗余、提高代码的可读性和可维护性等手段来实现。例如避免使用过多的嵌套语句尽可能地使用简单的数据结构和算法避免使用复杂的编程语言特性等。
2、低耦合松耦合
耦合是指代码之间的依赖关系。低耦合或者松耦合的代码是指代码之间的依赖关系尽可能地少每一部分代码都可以独立地完成其功能。
这样可以使得代码更容易维护和修改因为修改一部分代码不会影响到其他部分的代码。实现低耦合的方法主要有模块化设计、使用接口或者抽象类来隐藏实现细节等。
3、易替换
易替换的代码是指当需求变更或者出现更好的实现方法时可以方便地替换掉原来的代码。
这需要代码的设计有良好的扩展性和灵活性例如使用接口或者抽象类来定义功能使用设计模式来组织代码等。
4、易删除
易删除的代码是指当某部分代码不再需要时可以方便地删除掉而不会影响到其他部分的代码。
这也需要代码的设计有良好的模块化和低耦合性。此外还需要有良好的测试覆盖以确保删除代码后不会引入新的错误。
如何写出优质代码
一、制定并遵守编码规范
编码规范是一套预先设定并约定好的编程风格和代码书写规则。
这本规则指南的内容囊括了变量、函数和类的命名方法空格和缩进的使用注释的编写方式以及代码结构的组织等等。其主要目的在于保障代码的一致性和易读性以便他人能更便捷地阅读和理解代码。
举个例子Python社区有一个非常著名的编码规范PEP 8。PEP 8对Python代码的格式有一系列的规定比如说缩进应该使用4个空格不要使用制表符每行代码的长度不应超过79个字符变量和函数的命名应该全部使用小写字母并用下划线分隔单词等等。
二、写注释
众所周知鱼的记忆只有7秒钟而程序员对他们写出代码的功能的记忆只有三天。
如果编程过程中不加以注释那么在代码完成的那一刻唯有程序员和上帝清楚其真正功能。三天过后恐怕只剩上帝明了这段代码的真正含义。
代码注释说白了就是对代码功能和实现逻辑的解释性补充主要用于增强代码的可读性和可维护性。
它应用的场景十分明确就是在编程过程中为代码加一个解释说明方便日后回顾。
然而注释的质量并不等同于其数量只有简洁、精准的注释才是高品质代码的标志。过度的注释如同背景噪音反而会干扰代码理解。因此适当的注释策略应是仅对代码中的关键部分与复杂逻辑进行注解。
除了其他常规好处注释还有助于快速查找和理解之前编写的代码从而提高代码的复用性。
三、使用有意义的命名
命名和注释一样都是程序员的大难题。
如果说注释考验的是程序员的总结能力那么命名无疑是在考验程序员丰富的想象力和创造力。我周围有不少心血来潮就会起奇葩名的程序员朋友想一出是一出。写的时候自我感觉良好觉得这个名合适或者方便等到阅读代码时傻了眼这都什么跟什么为什么意大利面应该拌24号混凝土。
一个好的名字应该能准确地反映出其功能或用途而不是随意地使用像list1或func1这样指代不明看了就懂下秒就忘的名字。
如果想解决命名这个难题最好建立自己的命名规则不论是对内部变量或全局变量都应让人们能够一目了然其变量含义。
四、避免使用全局变量
全局变量是在程序全局范围内定义的变量它们可以在程序的任何处被访问和修改。看起来很便利对吧但如果大量使用全局变量编程的整个环境会变得复杂且混乱。
首先全局变量破坏了封装原则。封装是面向对象编程的一个重要原则它隐藏了对象的内部细节以保护外部环境。全局变量可以在任何地方被修改这使得追踪和理解代码流程变得困难。这意味着你需要记住全局变量的状态并理解在程序的哪个部分会改变它。
其次全局变量导致函数之间产生隐含的耦合性。这意味着一个函数的行为可能依赖于另一个完全不相关的函数是否修改了全局变量。代码便变得难以理解和预测。
最后全局变量可能导致命名冲突。如果你在不同的地方使用相同的全局变量名你可能会意外地覆盖全局变量的值。
相比之下使用局部变量和函数参数能使代码更加清晰和可维护。局部变量仅在函数内部存在因此你不需要关心它们在其他地方如何被使用或修改。函数参数可以明确地指出函数的输入和输出使得理解和测试函数变得容易。
因此尽管全局变量在某些情况下可能是必要的但在大多数情况下最好尽量避免使用全局变量。如果你需要在多个函数之间共享数据可以考虑使用函数参数返回值或者创建一个包含这些数据的类。这将使你的代码更加清晰易于理解更容易进行测试和调试。
五、尽量减少代码的重复
在编程中避免代码重复是一个非常重要的原则通常被称为DRY原则即Don’t Repeat Yourself。
这意味着你应避免写入重复或相似的代码块而是找出重复模式并创建可复用的函数或类替代。
例如创建一个计算平均值的函数calculate_average无论何处需要计算平均值都可以调用此函数而非重复编写相同代码。
遵守DRY原则有三大好处
提升代码可读性无重复代码让代码更易理解。减少错误使用函数或类避免因修改重复代码而导致的错误。提高生产力一次编写多次使用节省时间和精力。
六、使用版本控制系统
版本控制系统是一种记录文件或者项目的修改历史以便将来查阅特定版本的系统。
其中Git是最受欢迎的版本控制系统之一可以帮助开发者跟踪和管理代码变化支持多人协作。主要命令有git commit和git checkout。
git commit用于提交修改并附加解释消息。
当你对代码进行了修改并希望将这些修改成为新的“版本”时就可以使用git commit命令。这个命令会将你的修改保存并附加一条你自行编写的消息以便解释此次修改的内容。通过这种方式你可以清晰地跟踪每个版本的变化以及进行这些变化的原因。
git checkout用于查看或回滚到早期版本。
这个命令可以让你查看或回退到代码的早期版本。如果你发现最新的代码存在问题或者只是想查看早期版本的样子就可以使用这个命令。执行这个命令后你的代码库将回到你选择的那个版本的状态。
使用版本控制系统来写代码有三大好处
1、跟踪代码变化你可以清楚地看到每一次的修改以及为什么要做这些修改。如果你发现代码有问题你可以回滚到早期的版本或者比较不同版本的差异找出问题的来源。
2、支持多人协作每个人可以在自己的分支上工作然后将修改合并到主分支。这样每个人都可以同时工作而不会相互干扰。
3、作为代码备份即使你的电脑出了问题或没保存你也可以从版本控制系统中恢复你的代码。
七、测试你的代码
测试代码是编程的关键步骤它能确保代码的功能、性能和安全性保证及时发现错误。
测试代码有五大好处
1、发现错误在代码部署前发现并修复错误防止潜在问题。
2、质量提升保证代码的功能性、可靠性和性能提升整体质量。
3、效率提升及时发现并解决问题避免后期大改提升开发效率。
4、提供文档测试用例可作为代码使用示例帮助理解和使用代码。
5、重构促进有了测试可以更自信地进行代码重构因测试会捕获引入的错误。
八、保持代码简洁
编程的目标之一自然是写出清晰、简洁和可维护的代码。如何写出一份简洁的代码全看程序员们的手下功夫这是需要练习和后期修改的。
九、代码审查
代码审查也被称为代码评审或源代码审查是一种质量保证活动。
开发人员通过检查、阅读和理解他人代码以发现和修复错误、优化代码设计、提高代码可读性和可维护性同时用来分享知识。这个过程可以在不同环境下进行例如在会议中或使用代码共享平台如GitHub。
举个例子在GitHub上开发者通过Pull RequestPR进行代码审查请求他人检查并合并更改。这个机制让团队成员能对新的或修改的代码提出问题、建议或修复。
代码审查的好处包括发现和修复代码错误提高软件质量和稳定性优化代码设计提高代码可读性和维护性分享知识和最佳实践提高团队效率。
此外新员工可以通过代码审查更快地了解代码库和项目同时开发人员也可以通过审查他人代码来提升自己的技能。
十、代码重构
代码重构是优化代码的过程其中包括分解、合并、简化等步骤目的是想提高代码的质量、可读性、可维护性和可重用性。
程序员们常说“如果程序能跑就别碰它”。这话有点自嘲的意味因为有时候bug出现的地方和原因可能千奇百怪也确实不知道怎么解决。
可不管程序的下场就是——越到后面越收不了尾最后可能造出个屎山代码来。
好比GTA5这个游戏在加载时居然有个if语句居然循环了19.8亿次严重拖慢了游戏的加载速度结果修了7年都没修好生怕改了这串代码后其他程序跟着崩溃。
而且重构不应该等上个几个月再进行而应该是实时的持续的写完了一个功能后最好就想着如何优化、重构它了。修改一篇800字的作文最好的修改时间就是写完的那一刻。
学习方法
1、避免重复造轮子
在IT行业中重复造轮子这个词通常用来形容一种无谓的努力即重新编写一些已经被别人编写过的代码或者功能。
可如果已经有了一种解决问题的方法那么就实在没有必要再去花费时间和精力去创建一个相同的解决方案重复的劳作只会让人身心疲惫。
人类文明之所以会进步是因为我们踩在前人的肩膀往上爬编程也是这个道理。
有些程序员会对这种借鉴的行为不屑一顾觉得很low真正的大佬就该自己从零开始做一切
这样的想法很对但问题是咱们又不是大佬只是普普通通的小码农有捷径为什么不走开源社区的意义不就是通过分享让所有人能轻松解决已经解决过的问题吗
举个例子假设每个人都得自己动手制造一辆汽车那将会是多么的费时费力。我们需要从零开始研究如何制作轮胎、发动机、刹车系统等等。但实际上我们完全可以直接买一辆已经生产出来的汽车然后根据自己的需求进行一些定制。这样一来我们就可以把时间和精力用在更重要的事情上比如开着汽车去我们想去的地方。
现在已经有许多开源的库和框架供我们使用它们已经帮我们解决了许多普遍存在的问题。我们只需花时间学习如何运用它们而无需从零开始编写代码。这样我们就能把更多的时间和精力集中在解决实际业务问题上而不是纠结于底层技术问题的处理上。
遵守“避免重复造轮子”这个概念对我们的好处显而易见。
一来避免了重复劳作提高了工作效率。二来利用其他人已经测试过的代码就可以避免掉一些常见的错误和bug。
简单来说程序员应该尽可能地利用已有的资源而不是浪费时间去重复别人已经做过的事情。
2、多看官方文档及他人代码
如果想要提升自己的代码质量最好的办法还是去多看多学多练因为很多东西是“纸上得来终觉浅绝知此事要躬行”。
官方文档和他人的优质开源代码可以说是程序员最好的学习资源。
官方文档是技术或软件开发者为大家提供的最全面、最权威的信息来源。它通常包含了你需要知道的一切包括如何使用这项技术技术背后的原理以及常见问题的解答等等。
初学者对官方文档的第一印象可能是“难懂”其实不是的。
官方文档一般会从基础的概念开始讲起然后逐渐深入到更复杂的内容。这种结构有助于我们系统地理解和学习一项技术。此外官方文档通常包含很多示例代码我们既可以通过这些代码来理解概念也可以把它们作为实践的基础。
通过阅读和实践官方文档我们不仅可以学到如何使用技术也可以理解到技术背后的设计思想这对于我们理解和掌握技术是非常有帮助的。
阅读优秀的开源项目代码是学习和理解如何有效地组织和构建代码的最佳渠道。
深入阅读他人的代码时我们会得到一些书上不会告诉我们的知识比如如何处理各种错误和异常等。书和教学视频教会我们理论知识而这些实战中出来的代码会告诉我们在实际编程过程中可能会遇到的问题会告诉我们解决这些问题的思路。
此外多看看优秀案例有助于我们培养形成良好的编程风格。
3、面向搜索引擎编程
开源的价值在于它为开发者搭建了一个广大的平台让他们能够共享代码吸取他人的优秀经验同时也能针对别人的代码进行修改和优化以此来提升自己的编程水平。
这些前人趟过雷的经验教训或是精心制作的框架代码都放在网络上。很多时候你所疑惑的问题或者想实现的功能已经在网上了你不必苦思冥想或者去麻烦其他程序员只需要动动鼠标你就可以得到答案。
在这个过程中搜索引擎就像一本大型的知识百科全书它里面储存了丰富的编程知识和解决问题的方法只需要输入关键词就能找到相关的信息。
有些人可能认为仅会用搜索引擎找资料而不自己动脑筋解决问题算什么好汉。
然而实际情况是如果一个普通的程序员能够熟练运用搜索引擎那他就能立马解决目前面临的99%的问题。至于为什么是99%那是自然是因为搜索引擎也不是万能的。
有时候搜索引擎所提供的答案并不能完全解决你的问题或者说你需要花费大量的时间去筛选和理解这些信息。
不过不管怎么说利用搜索引擎编程的确有效提升效率和代码质量搜索过程中还可参考他人优秀实践以避免重复劳动。同时还能学习最新技术保持技术领先并能寻找编程问题的解决方案增强解决问题能力。
Google、Stack Overflow和GitHub是开发者常用的三个搜索工具可以解决开发过程中的大部分问题。
Google可以提供大量的编程知识和教程Stack Overflow是一个专门为程序员提供问题解答的社区GitHub则是一个开源代码托管平台可以找到大量的优秀代码和项目。
4、走出第一步
哪怕写的是垃圾代码你也得先写啊。不写就什么东西都没有了。
想写优质代码首先要敢于写垃圾代码。尽可能地把所有需求的代码都写出来哪怕它们看起来很混乱。
就好比写作脑中的想法再完美如何想着下笔如有神你都得先把想法写下来无论是何种贫瘠的语言或是不出色的文笔都得先把这些写出来然后才能够修改它。
你要接受需求是不断变化的得先把能搞定需求的代码写出来后期再重构。
那怎么把垃圾代码修改成优质代码呢
这里有一个原则大家可以看一下
开放-封闭原则OCP
开放-封闭原则OCP是面向对象设计五个基本原则之一它的核心思想是软件实体类、模块、函数等等应当对扩展开放对修改封闭。
换句话说当软件需要变化时应该通过扩展软件实体的行为来实现变化而不是通过修改已有的代码来实现。
“对扩展开放” 意味着我们应该设计出可以容纳新功能的系统这就要求我们在设计系统时需要有前瞻性考虑到可能的未来需求和变化。
“对修改封闭” 则意味着一旦系统完成我们应该尽量避免修改已有的代码。因为对已有代码的修改会带来风险可能会引入新的错误。如果我们的系统设计得足够好那么当新的需求来临时我们只需要添加新的代码而不是修改旧的代码。
为了达到这个目标我们需要在设计时尽可能使各个模块之间的依赖关系降至最低使得一个模块的改动不会牵连其他模块。同时我们也需要尽可能地使用抽象和封装通过定义接口或者抽象类来隐藏具体实现这样当具体实现变化时依赖于它的代码就不需要改动。