掌握代码整洁之道的 5 个技巧
清洁代码到底是什么?
既然我的代码没有清洁代码也能正常工作,为什么还要使用清洁代码呢?
1.直观的变量名
2. 不言自明的功能
3. 将相似的功能组合在一起
4. 尽量减少评论数量
5.代码格式化
结论
感谢阅读
优秀的程序员写的代码很无聊。优秀的程序员写的代码真的很无聊。
去年某个时候,我在网上看到这句话,它让我了解了干净代码的概念。
清洁代码到底是什么?
简单来说,干净代码是指易于阅读和理解的代码库。干净代码的一些显著特点是:
- 减少读者的认知负担
- 包含直观命名的变量和函数
- 遵循编码的最佳实践
既然我的代码没有清洁代码也能正常工作,为什么还要使用清洁代码呢?
很高兴你问到这个问题。“整洁代码”并非指编写能够正常工作的代码,而是指编写易于阅读和长期维护的代码。从这张图可以看出,维护脏代码的成本会随着时间的推移急剧增加,而“整洁代码”的成本则保持相对稳定。
整洁代码不是最短的或看起来最漂亮的,但它是优雅的代码,理解起来只需花费最少的努力。
编程既是一门艺术,也是一门科学。以下是一些帮助您编写“干净代码”的技巧。
1.直观的变量名
显然,没有人会在心里进行所有的计算来检查变量存储了什么。
示例 1
const x = n.filter(e => e > 0);
示例 2
const positiveElements = numbers.filter(num => num > 0);
正如您所看到的,第二个例子比第一个例子更容易理解。
对于布尔值,变量名应该是一个可以用“是”或“否”回答的问题,例如
const isValid = false;
const hasAuthorization = true;
2. 不言自明的功能
编写函数或方法时需要记住两件事:
- 遵循单一职责原则(SRP)
- 函数名称应该是动作词(动词)
单一职责原则 (SRP)规定一个函数应该只执行一项特定的任务。例如,一个向服务器发送数据的函数 不应该 验证数据。
const validate = (data) => {
// ...
}
const sendData= (data) => {
// ...
}
const submit = (data) => {
if (!validate(data)){
return;
}
sendData(data)
}
还有另外两个值得遵循的原则:
- 函数体不应包含超过 2 层嵌套
- 一个函数最多可以接受 3 个参数
3. 将相似的功能组合在一起
现在我们来了解一下内聚力的概念。内聚力是衡量模块元素功能相关程度的标准。
相关函数应该放在一个类中,帮助我们保持代码的划分
class IOHelper:
@staticmethod
def read_data(file_name: string) -> None:
pass
@staticmethod
def write_data(file_name: string, data: Any) -> None:
pass
这里我们发现该类仅将用于ioIOHelper
操作的函数组合在一起,而没有任何自己的实用程序。
4. 尽量减少评论数量
对于一些初学者来说,这可能听起来有点违反直觉,但请听我说完。你编写的代码应该是不言自明的,任何查看你代码的人都不应该依赖注释来理解它的作用。
在极少数情况下,您可能需要注释,以防出现一些不直观的代码而没有解决方法。
// using setTimeout to avoid race-condition
setTimeout(fn, 0)
5.代码格式化
代码库应始终遵循一套严格的格式规则。使用像black或prettier 这样的格式化程序来自动化格式化也是一个好主意。
项目结构应该在项目开始之前确定,并且每个参与项目的人都应该了解并同意遵守它,因为项目结构依赖于上下文,每个人都喜欢特定的结构而不是其他结构。
还应事先指定变量和函数命名约定(isValid
或hasVality
等),并应牢记特定于语言的情况(例如:python中的蛇形命名法和JS/TS中的驼峰命名法)。
snake_case_variable = "value"
camelCaseVariable = "value"
结论
正如前面提到的,简洁的代码并非最短的代码,而是最容易理解的代码。遵循这些原则可以帮助你成为一名更优秀的程序员,这不仅能提高你的编程技能,还能提升编程所需的软技能,因为它能教会你如何向非技术人员解释你的代码。
感谢阅读
需要一位顶级软件开发自由职业者来解决你的开发难题吗?在Upwork上联系我
想联系我吗?请在LinkedIn上联系我
关注我的博客,每两周在Medium上获取最新资讯
常问问题
这些是我经常收到的一些问题。希望这个常见问题解答部分能解决您的问题。
-
我是初学者,该如何学习前端 Web 开发?
可以参考以下文章: -
你能指导我吗?
抱歉,我工作已经很忙了,没时间指导任何人。