当前位置: 首页 > ops >正文

代码可读性的详细入门

img

🏠个人主页:尘觉主页

文章目录

  • 前言
  • 一、可读性的重要性
  • 二、用名字表达代码含义
  • 三、避免名字歧义
  • 四、良好的代码风格
  • 五、注释的价值
  • 六、如何编写注释
  • 七、提高控制流的可读性
  • 八、拆分长表达式
  • 九、变量与可读性
  • 十、抽取函数
  • 十一、一次只做一件事
  • 十二、用自然语言表述代码
  • 十三、减少代码量
    • 😄总结

前言

在软件开发中,
程序员大部分时间并不是在写代码,而是在读代码。我们要阅读自己的代码,也要阅读他人的代码。代码的可读性不仅影响开发效率,还会直接影响项目的长期维护成本。可读性良好的代码能够降低沟通成本,减少理解错误,并且让重构与扩展更加容易。相反,晦涩难懂的代码不仅容易埋下 bug,还会让团队成员不愿意修改它,从而影响整个系统的健康演进。

本篇总结了如何提升代码可读性的实用方法,涵盖命名、注释、风格、控制流设计、变量管理、函数抽取等方面,为开发者提供系统化的参考。


一、可读性的重要性

编程有很大一部分时间是在阅读代码,可读性良好的代码能显著提升效率和质量。只有在极少数性能关键场景下才可暂时牺牲可读性,其余情况下,可读性应当被放在首位。


二、用名字表达代码含义

  • 选用语义化单词:

    • send → deliver、dispatch、announce、distribute、route
    • find → search、extract、locate、recover
    • start → launch、create、begin、open
    • make → create、set up、build、generate、compose、add、new
  • 循环迭代器避免 i, j, k,可改为 userIndexmemberIndex

  • 名字长度与作用域成正比:作用域大 → 名字长,作用域小 → 名字短。


三、避免名字歧义

  • 先思考别人是否会误解这个名字。
  • 布尔命名加前缀:iscanshouldhas
  • 数量范围:minmax;空间范围:firstlast;排除范围:beginend
    在这里插入图片描述

四、良好的代码风格

  • 使用空行和缩进组织逻辑。
  • 对齐注释,保持整齐:
int a = 1;   // 注释
int b = 11;  // 注释
int c = 111; // 注释
  • 变量定义顺序应与业务对象顺序一致。

五、注释的价值

  • 不要为显而易见的代码写注释,如 getter/setter。

  • 注释不是名字的替代品,应优先写好变量名。

  • 注释可用于:

    • 记录设计思路;
    • 提醒特殊情况;
    • 标记未完成工作:
标记用法
TODO待做
FIXME待修复
HACK临时粗糙方案
XXX危险,需特别注意

六、如何编写注释

  • 简洁清晰:
// Student's name -> Student's score
Map<String, Integer> scoreMap = new HashMap<>();
  • 用示例说明:
// Example: add(1, 2) returns 3
int add(int x, int y) {return x + y;
}
  • 使用专业名词缩短解释。

七、提高控制流的可读性

  • 条件表达式:变量在左,常数在右。
  • 三目运算符仅限逻辑简单的情况。
  • 避免使用 goto
  • 在循环中使用 return 减少嵌套。

八、拆分长表达式

  • 使用解释性变量:
username = line.split(':')[0].strip()
if username == "root":...
  • 运用逻辑定律简化表达式:
if (!(a || b)) { ... }

九、变量与可读性

  • 减少控制流变量:用 break/return 替代布尔标记。
  • 减小作用域:变量应尽量靠近使用点。
  • 避免全局变量:JavaScript 中应始终用 var/let/const 声明变量。

优化示例

原始代码:

var setFirstEmptyInput = function(new_value) {var found = false;var i = 1;var elem = document.getElementById('input' + i);while (elem != null) {if (elem.value === '') {found = true;break;}i++;elem = document.getElementById('input' + i);}if (found) elem.value = new_value;return elem;
}

优化后:

var setFirstEmptyInput = function(new_value) {for (var i = 1; true; i++) {var elem = document.getElementById('input' + i);if (elem === null) return null;if (elem.value === '') {elem.value = new_value;return elem;}}
};

十、抽取函数

  • 函数应围绕高层目标,次要逻辑可抽取为独立函数。
  • 抽取的好处:更容易测试、调试、修改。
  • 抽取要适度,避免过度分散。

十一、一次只做一件事

  • 单一职责原则:每段代码或每个函数只完成一个任务。
  • 若任务过多,应拆分成多个函数或逻辑块。

十二、用自然语言表述代码

  • 写代码前先用伪代码描述逻辑,再翻译成代码。
  • 能帮助理清思路,提升结构清晰度。

十三、减少代码量

  • 避免过度设计。
  • 善用标准库与现有工具,减少冗余实现。

😄总结

代码不仅是让计算机执行的指令,更是团队成员之间沟通的语言。可读性优先的原则能够显著降低沟通成本、提高维护效率。

提升可读性的方法包括:合理命名、避免歧义、保持良好风格、合理注释、简化控制流、缩小变量作用域、抽取函数、专注单一任务、借助伪代码、减少冗余实现。

“写给人看的代码,顺便能让机器运行”,应成为每位开发者的信条。


😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

img

http://www.xdnf.cn/news/20090.html

相关文章:

  • 1.10 虚拟内存管理机制
  • 【面板数据】全球数字贸易规则一体化程度数据及参考文献(2000-2024年)
  • 11.1.7 cpp客户端上传测试和文件引用计数测试
  • 【数据结构——哈夫曼树】
  • 理解UE4中C++17的...符号及enable_if_t的用法及SFINAE思想
  • Redis到底什么,该怎么用
  • JavaWeb —— 登录校验
  • AOI 检测准、机床运行稳?杰和 AR707 撑起工控 “精准 + 高效”
  • biocmanager安装 库 老是提示网络连接错误 才尝试各种办法
  • 「数据获取」《中国劳动统计年鉴》(1991-2024)
  • linux inotify 功能详解
  • MySQL锁篇-锁类型
  • 解析豆科系统发育冲突原因
  • 无字母数字命令执行
  • UC Berkeley 开源大世界模型(LWM):多模态大模型领域世界模型技术新进展
  • 鹿客发布旗舰新品AI智能锁V6 Max,打造AI家庭安全领域新标杆
  • keil 5 STM32工程介绍
  • 写给大学生的
  • 【开题答辩全过程】以 在线教育系统为例,包含答辩的问题和答案
  • 从安装到应用:GISBox与GeoServer的关键区别及用户适配指南
  • Gradle Task 进阶:Task 依赖关系、输入输出、增量构建原理
  • 一种用geoserver发布复杂样式矢量服务的方法
  • [bat-cli] 语法映射 | SyntaxMapping
  • 机器学习-决策树(下)
  • 2025年跨领域管理能力提升认证路径分析
  • JSON转义
  • 涉密图纸管理办法| 涉密图纸如何保护?这4个图纸防泄密方法,可以一试!
  • MOSFET SOA曲线评估
  • AI驱动开发:颠覆传统编程新范式
  • swoole 中 Coroutine\WaitGroup 和channel区别和使用场景