介绍
著名的软件专家 Robert C. Martin 在他的著作《代码整洁之道:A Handbook of Agile Software Craftsmanship》中写道:“编写整洁的代码是你必须做的,因此才可以称自己为专业人士。没有任何理由可以说自己做不到最好。”
编程无疑是繁琐的,尤其是在人工智能、智能计算和自动化测试时代。程序员不仅需要学习语言和学习算法,还需要倾向于编写复杂的工作应用程序。编写整洁的代码类似于烹饪或摄影等活动——看起来很容易,但实际上并不容易。尽管如此,由于整洁的代码能提供众多的好处,它仍然至关重要。
好的软件的一个关键特征是整洁的代码。如果代码易于理解和修改,开发人员更喜欢开发应用程序。有时,编码会加速赶上最后期限,但最终会导致延迟,因为需要修复更多错误。研究表明,与编写代码相比,阅读代码所花费的时间高于 10:1。因此,出现了对整洁代码的需求。
什么是整洁的代码?
以下是整洁代码的特点:
- 它必须是可读的。
- 这一定很优雅。
- 它们必须易于理解并遵循单一职责原则 ( Single Responsibility Principle,SRP)。
- 整洁代码必须易于理解、易于修改和易于维护。
- 整洁必须按照测试策略来进行测试。
Brady Brooch 在他的《面向对象的分析和设计与应用程序》一书中将整洁的代码定义为“简单直接。整洁的代码读起来就像写得很好的散文。整洁的代码永远不会掩盖设计者的意图,而是充满了清晰的抽象和直接的控制线。”
编写整洁代码的重要性
编写整洁的代码有几个优点。其中一些包括以下内容:
- 解决问题变得容易: 整洁的代码从根本上改变了解决问题的方式。软件设计和算法变得更加有意和优雅,反对强制性和受约束的解决方案。
- 清晰的思想交流: 整洁的代码减少了一起工作的一组程序员之间发生争议和误解的可能性,最终减少了错误。
- 需要更少的维护: 整洁的代码更易于阅读和理解,因此花在破译各段功能上的时间更少,并留出更多时间用于更新、修订和扩展功能。
整洁代码遵循的最佳技巧
在讨论整洁代码的定义和重要性之后,这里是编写和实施最佳策略的 10 大技巧。
使用描述性名称
函数和变量的名称应尽可能具有描述性。例如,要引用字符和姓氏,可以使用变量 name developer 和 lastNameDeveloper 而不是仅使用 name。仅使用 n 更糟糕,因为使用该语法很难理解变量的组成部分。
函数的名称应始终以动词开头。例如,可以使用返回开发人员姓名的模块 getDeveloperName
代替调用 name 的方法。
使用空行创建可读代码
使用空行的好处如下:
- 它们增加了代码的清晰度。
- 额外的一行标识了函数在何处轻松结束。
- 行将变量的声明与操作函数分开。
- 返回值前的一行有助于理解操作。
向函数发送的参数不超过三个
在函数中使用一组参数使得很难找到它们的使用位置。相反,仅使用三个参数并在函数内部遵循它们的逻辑会更有效,并使代码清晰易读。
如果需要使用三个以上的参数,则向函数发送一个对象,并使用相关键。
函数必须只执行一项任务
如果开发人员想解决一个问题,他们应该避免编写一个做多项事情的函数。一个模块必须执行一项且仅一项任务。拥有两个或更多的短函数比只有一个复杂的方法要好。
函数必须简短
如果需要复杂的功能,使用类更可靠。如前所述,方法必须只做一件事,并且必须很短。
减少一行中的字符数
远离长行代码使其更易于阅读。行的大小必须适合屏幕,这样就不需要水平滚动。Prettier 等许多工具允许开发人员控制其代码的格式。
注释的使用
使用注释有助于维护代码。虽然可以通过对函数和变量使用描述性名称来避免注释,但不建议这样做。注释使代码清晰连贯。
为提交代码创建描述性消息
提交需要描述性消息。方便以后理解代码的作用。应避免提供不充分信息的陈述。
对于开发人员来说,只写重构之类的消息是不够合乎逻辑的。诸如从 CRM 获取客户信息之类的声明是合适的。
使用单元测试和实践测试驱动开发
编写单元测试是开发中的关键步骤。它使代码整洁、灵活且可维护。修改代码和减少错误的过程变得容易。测试驱动开发 (TDD) 是软件开发中的一个过程,其中将需求转换为特定的测试用例,然后进行软件改进以通过新的测试。根据 Robert C. Martin 的说法,TDD 的三个定律如下:
- 生产代码应该使失败的单元测试通过。
- 单元测试不应该写成足以失败,编译失败就是失败。
- 只应编写足以通过一个失败的单元测试的生产代码。
学习设计模式 设计模式是一个广泛的领域,例如,提供由经验丰富且著名的开发人员发现的用于处理软件中常见问题的解决方案。
结论
编写整洁的编码是一项需要大量练习的技能。
标签:函数,读书笔记,代码,开发人员,之道,使用,编写,整洁 From: https://blog.51cto.com/yuzhou1su/5786180