优质代码是什么?
优质代码是指那些易于了解、易于保护、可读性强、结构明晰、没有冗余、运行功率高、可复用性强、稳定性好、可扩展性强的代码。
这类代码不仅能够精确履行预期功用,一起也便于其他开发者了解和修正。
这类代码一般会遵从一定的规划模式和编程标准,具有明晰的逻辑结构和标准的代码格局,且注释适量且恰当。
优质代码该具有什么条件?
1、轻量级
轻量级的代码首要是指代码的杂乱性低,易于了解和保护。
这一般经过削减代码的冗余、进步代码的可读性和可保护性等手法来完结。例如,防止运用过多的嵌套句子,尽或许地运用简略的数据结构和算法,防止运用杂乱的编程语言特性等。
2、低耦合(松耦合)
耦合是指代码之间的依靠关系。低耦合或许松耦合的代码是指代码之间的依靠关系尽或许地少,每一部分代码都能够独登时完结其功用。
这样能够使得代码更简略保护和修正,因为修正一部分代码不会影响到其他部分的代码。完结低耦合的办法首要有模块化规划、运用接口或许抽象类来躲藏完结细节等。
3、易替换
易替换的代码是指当需求变更或许出现更好的完结办法时,能够便当地替换掉本来的代码。
这需求代码的规划有杰出的扩展性和灵活性,例如,运用接口或许抽象类来界说功用,运用规划模式来安排代码等。
4、易删去
易删去的代码是指当某部分代码不再需求时,能够便当地删去掉,而不会影响到其他部分的代码。
这也需求代码的规划有杰出的模块化和低耦合性。此外,还需求有杰出的测验掩盖,以确保删去代码后,不会引进新的过错。
怎么写出优质代码?
一、拟定并恪守编码标准
编码标准是一套预先设定并约定好的编程风格和代码书写规矩。
这本规矩攻略的内容包括了变量、函数和类的命名办法,空格和缩进的运用,注释的编写方式,以及代码结构的安排等等。其首要意图在于保障代码的一致性和易读性,以便别人能更快捷地阅览和了解代码。
举个例子,Python社区有一个十分著名的编码标准PEP 8。PEP 8对Python代码的格局有一系列的规定,比如说,缩进应该运用4个空格,不要运用制表符;每行代码的长度不该超过79个字符;变量和函数的命名应该悉数运用小写字母,并用下划线分隔单词等等。
二、写注释
众所周知,鱼的回忆只要7秒钟,而程序员对他们写出代码的功用的回忆只要三天。
假如编程过程中不加以注释,那么在代码完结的那一刻,唯有程序员和天主清楚其真实功用。三天过后,恐怕只剩天主明了这段代码的真实意义。
代码注释说白了便是对代码功用和完结逻辑的解说性补充,首要用于增强代码的可读性和可保护性。
它运用的场景十分明确,便是在编程过程中为代码加一个解说说明,便当日后回忆。
但是,注释的质量并不等同于其数量,只要简练、精准的注释才是高品质代码的标志。过度的注释如同背景噪音,反而会搅扰代码了解。因而,恰当的注释策略应是仅对代码中的关键部分与杂乱逻辑进行注解。
除了其他常规优点,注释还有助于快速查找和了解之前编写的代码,然后进步代码的复用性。
三、运用有意义的命名
命名和注释相同,都是程序员的大难题。
假如说注释检测的是程序员的总结才能,那么命名无疑是在检测程序员丰厚的想象力和创造力。我周围有不少心血来潮就会起奇葩名的程序员朋友,想一出是一出。写的时分自我感觉杰出,觉得这个名合适或许便当,比及阅览代码时傻了眼,这都什么跟什么,为什么意大利面应该拌24号混凝土。
一个好的姓名应该能精确地反映出其功用或用处,而不是随意地运用像list1或func1这样指代不明,看了就懂,下秒就忘的姓名。
假如想处理命名这个难题,最好树立自己的命名规矩,不论是对内部变量或大局变量,都应让人们能够一望而知其变量意义。
四、防止运用大局变量
大局变量是在程序大局范围内界说的变量,它们能够在程序的任何处被拜访和修正。看起来很便当对吧,但假如许多运用大局变量,编程的整个环境会变得杂乱且混乱。
首要,大局变量破坏了封装准则。封装是面向对象编程的一个重要准则,它躲藏了对象的内部细节以保护外部环境。大局变量能够在任何当地被修正,这使得追寻和了解代码流程变得困难。这意味着你需求记住大局变量的状况,并了解在程序的哪个部分会改变它。
其次,大局变量导致函数之间产生隐含的耦合性。这意味着一个函数的行为或许依靠于另一个彻底不相关的函数是否修正了大局变量。代码便变得难以了解和猜测。
最终,大局变量或许导致命名抵触。假如你在不同的当地运用相同的大局变量名,你或许领会外地掩盖大局变量的值。
相比之下,运用局部变量和函数参数能使代码愈加明晰和可保护。局部变量仅在函数内部存在,因而你不需求关怀它们在其他当地怎么被运用或修正。函数参数能够明确地指出函数的输入和输出,使得了解和测验函数变得简略。
因而,虽然大局变量在某些情况下或许是必要的,但在大多数情况下,最好尽量防止运用大局变量。假如你需求在多个函数之间同享数据,能够考虑运用函数参数,返回值,或许创立一个包括这些数据的类。这将使你的代码愈加明晰,易于了解,更简略进行测验和调试。
# 不好的实践
x = 10
def increment():
global x
x += 1
# 好的实践
def increment(x):
return x + 1
五、尽量削减代码的重复
在编程中,防止代码重复是一个十分重要的准则,一般被称为DRY准则,即”Don’t Repeat Yourself”。
这意味着你应防止写入重复或相似的代码块,而是找出重复模式并创立可复用的函数或类替代。
例如,创立一个核算平均值的函数calculate_average,无论何处需求核算平均值,都能够调用此函数,而非重复编写相同代码。
def calculate_average(numbers):
return sum(numbers) / len(numbers)
恪守DRY准则有三大优点:
-
进步代码可读性:无重复代码让代码更易了解。
-
削减过错:运用函数或类防止因修正重复代码而导致的过错。
-
进步出产力:一次编写,多次运用,节省时刻和精力。
六、运用版别控制体系
版别控制体系是一种记载文件或许项意图修正前史,以便将来查阅特定版别的体系。
其间,Git是最受欢迎的版别控制体系之一,能够帮助开发者盯梢和办理代码改变,支撑多人协作。首要指令有git commit
和git checkout
。
git commit
用于提交修正,并附加解说音讯。
当你对代码进行了修正,并期望将这些修正成为新的“版别”时,就能够运用git commit
指令。这个指令会将你的修正保存并附加一条你自行编写的音讯,以便解说此次修正的内容。经过这种方式,你能够明晰地盯梢每个版别的改变,以及进行这些改变的原因。
git checkout
用于查看或回滚到前期版别。
这个指令能够让你查看或回退到代码的前期版别。假如你发现最新的代码存在问题,或许仅仅想查看前期版别的样子,就能够运用这个指令。履行这个指令后,你的代码库将回到你选择的那个版别的状况。
运用版别控制体系来写代码有三大优点:
1、盯梢代码改变:你能够清楚地看到每一次的修正,以及为什么要做这些修正。假如你发现代码有问题,你能够回滚到前期的版别,或许比较不同版别的差异,找出问题的来历。
2、支撑多人协作:每个人能够在自己的分支上工作,然后将修正兼并到主分支。这样,每个人都能够一起工作,而不会彼此搅扰。
3、作为代码备份:即便你的电脑出了问题或没保存,你也能够从版别控制体系中康复你的代码。
七、测验你的代码
测验代码是编程的关键过程,它能确保代码的功用、性能和安全性,确保及时发现过错。
例如,能够运用Python的unittest模块编写测验用例:
import unittest
class TestFactorial(unittest.TestCase):
def test_factorial(self):
self.assertEqual(factorial(5), 120)
测验代码有五大优点:
1、发现过错:在代码部署前发现并修正过错,防止潜在问题。
2、质量进步:确保代码的功用性、可靠性和性能,进步全体质量。
3、功率进步:及时发现并处理问题,防止后期大改,进步开发功率。
4、供给文档:测验用例可作为代码运用示例,帮助了解和运用代码。
5、重构促进:有了测验,能够更自信地进行代码重构,因测验会捕获引进的过错。
八、保持代码简练
编程的方针之一自然是写出明晰、简练和可保护的代码。怎么写出一份简练的代码全看程序员们的手下功夫,这是需求操练和后期修正的。
例如,运用Python的列表推导式能够简化代码:
# 不简练的代码
result = []
for i in range(10):
if i % 2 == 0:
result.append(i)
# 简练的代码
result = [i for i in range(10) if i % 2 == 0]
在上面的例子中,咱们能够看到,运用列表推导式的版别比运用传统循环的版别要简练得多,也更易读。这是因为列表推导式将循环和条件判断兼并到了一行代码中,使得代码的逻辑愈加显着。
九、代码检查
代码检查,也被称为代码评定或源代码检查,是一种质量确保活动。
开发人员经过检查、阅览和了解别人代码,以发现和修正过错、优化代码规划、进步代码可读性和可保护性,一起用来分享常识。这个过程能够在不同环境下进行,例如在会议中或运用代码同享渠道如GitHub。
举个例子,在GitHub上,开发者经过Pull Request(PR)进行代码检查,恳求别人检查并兼并更改。这个机制让团队成员能对新的或修正的代码提出问题、建议或修正。
代码检查的优点包括:发现和修正代码过错,进步软件质量和稳定性;优化代码规划,进步代码可读性和保护性;分享常识和最佳实践,进步团队功率。
此外,新员工能够经过代码检查更快地了解代码库和项目,一起,开发人员也能够经过检查别人代码来进步自己的技能。
十、代码重构
代码重构是优化代码的过程,其间包括分解、兼并、简化等过程,意图是想进步代码的质量、可读性、可保护性和可重用性。
程序员们常说“假如程序能跑,就别碰它”。这话有点自嘲的意味,因为有时分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)是面向对象规划五个基本准则之一,它的中心思维是软件实体(类、模块、函数等等)应当对扩展开放,对修正关闭。
换句话说,当软件需求改变时,应该经过扩展软件实体的行为来完结改变,而不是经过修正已有的代码来完结。
“对扩展开放” 意味着咱们应该规划出能够容纳新功用的体系,这就要求咱们在规划体系时需求有前瞻性,考虑到或许的未来需求和改变。
“对修正关闭” 则意味着一旦体系完结,咱们应该尽量防止修正已有的代码。因为对已有代码的修正会带来风险,或许会引进新的过错。假如咱们的体系规划得足够好,那么当新的需求来临时,咱们只需求增加新的代码,而不是修正旧的代码。
为了到达这个方针,咱们需求在规划时尽或许使各个模块之间的依靠关系降至最低,使得一个模块的改动不会牵连其他模块。一起,咱们也需求尽或许地运用抽象和封装,经过界说接口或许抽象类来躲藏详细完结,这样当详细完结改变时,依靠于它的代码就不需求改动。
关于Masutaa
Masutaa是个互联网从业者自在协作交流渠道,链接行业内TOP10%人才!现在渠道上现已有将近400名互联网顶级人才,其间近70%的从业者从业年限超3年。
在这个渠道上,你有机会获得远程项目,也可完结地理套利,成为数字游民!