共计 6872 个字符,预计需要花费 18 分钟才能阅读完成。
优质代码是什么?
优质代码 是指那些易于了解、易于保护、可读性强、构造清晰、没有冗余、运行效率高、可复用性强、稳定性好、可扩展性强的代码。
这类代码不仅可能精确执行预期性能,同时也便于其余开发者了解和批改。
这类代码通常会遵循肯定的设计模式和编程标准,领有清晰的逻辑构造和标准的代码格局,且正文适量且失当。
优质代码该具备什么条件?
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 年。
在这个平台上,你有机会取得近程我的项目,也可实现天文套利,成为数字游民!