网站首页 > 技术教程 正文
降低认知复杂度是帮助您编写安全、可维护和可靠代码的关键,这将使开发人员(包括您自己)更快乐。
译自 5 Clean Code Tips for Reducing Cognitive Complexity,作者 John Clifton。
你可能理解试图理解别人旧代码(甚至是你自己的代码)带来的挫败感。时间流逝让你记忆模糊,现在你已经无法理解代码的逻辑。
创建你和其他人可以理解的代码至关重要。降低认知复杂度是帮助你编写安全、可维护和可靠的 干净代码 的关键,这将使其他开发人员(包括你自己)在长期内更快乐。以下是如何采取纪律性方法。
1. 编写团队会感谢你的代码
软件开发非常像团队运动。理解你编写的代码如何融入整体项目以及其他需要阅读代码的开发人员如何理解它至关重要。
圈复杂度(Cyclomatic complexity)最初被引入作为一种衡量模块控制流测试和维护难易程度的方法。这个公式可以帮助根据代码中分支的数量来评估需要多少测试。它不会很好地反映出你或你的队友将来理解和维护代码的难度。
2. 生活并非一帆风顺
线性代码是你的朋友。如果所有代码都是一个接一个的命令链 - 没有循环或曲折 - 你就不会有任何问题在脑海中理清所有事情。在代码中添加循环和分支会使理解和处理代码变得越来越困难。
每次这样做都会使代码的认知复杂度逐渐增加。问题是开发人员需要能够 编写循环和分支的代码,包括使用 if/else 语句的代码,来创建软件。这里关键的是专注。了解你正在使用什么,并清楚地知道你的代码是否做得太多。如果是,请考虑重构。了解代码的认知复杂度可以帮助你确定何时何地需要简化。
3. 嵌套会很快造成混乱
例如,嵌套代码(循环嵌套在循环中)难以理解。你嵌套代码越深,理清头绪并理解你正在处理的每一部分代码就需要付出更多努力。
查看你的代码,看看哪些嵌套组件导致了最大的头痛。然后,找到另一种编写代码的方法。了解每个组件带来的认知复杂度将帮助你走上正确的道路。
4. 有用的东西不会增加复杂度
存在许多结构可以使代码更清晰、更容易理解。switch 语句是一种很好的方法,可以帮助消除一系列嵌套的 if 或 if/else 语句,这些语句使代码变得模糊不清,并且不会增加代码的认知复杂度。帮助你跳出循环的 continue 或 break 语句也可以帮助你编写更清晰的代码,并且同样不会增加复杂度。这些只是可以帮助降低认知复杂度的不同类型结构中的一部分。
5. 使用正确的工具并编写干净代码
像 SonarLint、SonarQube 和 SonarCloud 这样的工具具有内置的认知复杂度测量功能,可以帮助你编写不仅运行良好,而且易于理解和构建的代码。它们可以帮助你更好地、更仔细地查看你的代码,以便你了解你在哪些地方使代码变得比必要时更复杂。专注于编写易于理解的代码,你的团队和未来的你都会感谢你!
开发人员应该始终专注于编写 干净代码 - 安全、可靠、可读和可维护的代码,为所有使用它的人节省软件项目中的重大头痛。有了正确的思维方式和工具,你可以确保你的代码对 软件质量 有帮助,而不是阻碍。
- 上一篇: 只有一行代码,能玩出什么花样? 一行代码有多少字符
- 下一篇: 不讲码德!坏味道偷袭我这个老码农
猜你喜欢
- 2024-11-13 你会给变量起的什么名字 变量起名的规则主要有
- 2024-11-13 提升你的编程能力 如何提高编程技术
- 2024-11-13 如何提升代码质量 提升代码能力的方式
- 2024-11-13 好代码实践:基于 Redis 的轻量级分布式均衡消费队列
- 2024-11-13 Google: 如何做code review? google网站怎么做
- 2024-11-13 《代码整洁之道》:5大基本要点 代码整洁之道适合什么人读
- 2024-11-13 低代码工具优缺点 低代码工具优缺点有哪些
- 2024-11-13 C++防御性编程,提高代码的健壮性
- 2024-11-13 不讲码德!坏味道偷袭我这个老码农
- 2024-11-13 只有一行代码,能玩出什么花样? 一行代码有多少字符
你 发表评论:
欢迎- 05-23不用羡慕Mac,Windows电脑可以直接访问iPhone相册了
- 05-23换了电脑上不去网怎么回事?看看如何修改mac地址!
- 05-23怎么查看打印机IP地址
- 05-23查看电脑端口号的方法
- 05-23怎么查电脑局域网中的其他电脑ip地址
- 05-23如何查看笔记本电脑尺寸
- 05-23【网络】IP地址冲突如何快速定位?
- 05-23电脑系统改mac地址的方法
- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)