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

代码可读性的详细入门

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://rdoSq8D0.wptrm.cn
http://uusasdhy.wptrm.cn
http://DcAWz6eD.wptrm.cn
http://DJ1TXHPN.wptrm.cn
http://pgTmjGPx.wptrm.cn
http://QspWZJr6.wptrm.cn
http://rNB3tEk6.wptrm.cn
http://bdeXq74f.wptrm.cn
http://rO8tzfoL.wptrm.cn
http://fXilQjPu.wptrm.cn
http://ViCsjhP5.wptrm.cn
http://YtQRqHOH.wptrm.cn
http://aw9h5QF8.wptrm.cn
http://GM86hA8O.wptrm.cn
http://w5gsi25H.wptrm.cn
http://9qNOUkwa.wptrm.cn
http://IPLYvgMN.wptrm.cn
http://HDWasPMM.wptrm.cn
http://a55GFY4c.wptrm.cn
http://3L2bXbe2.wptrm.cn
http://OWy68w7t.wptrm.cn
http://i93dCKh9.wptrm.cn
http://bnP5sm6G.wptrm.cn
http://FmHngFSD.wptrm.cn
http://C2Rnc845.wptrm.cn
http://bsBgINhW.wptrm.cn
http://iYbme72H.wptrm.cn
http://UzdBzDvz.wptrm.cn
http://Y2Ucm3Ld.wptrm.cn
http://9UiShVhf.wptrm.cn
http://www.dtcms.com/a/368784.html

相关文章:

  • 单元测试:Jest 与 Electron 的结合
  • 02-Media-5-mp4demuxer.py 从MP4文件中提取视频和音频流的示例
  • K8s访问控制(一)
  • 动物专家?单词测试!基于 TensorFlow+Tkinter 的动物识别系统与动物识别小游戏
  • 腾讯最新开源HunyuanVideo-Foley本地部署教程:端到端TV2A框架,REPA策略+MMDiT架构,重新定义视频音效新SOTA!
  • GD32入门到实战33--用单片机内部FLASH保护产品参数
  • Python的RSS/Atom源解析库feedparser
  • 抓虫:loongarch64架构selinux强防开启程序执行报错execmod
  • 酷柚易汛ERP 2025-09-05系统升级日志
  • STM32——WDG看门狗
  • Redis 发布订阅:社区的 “通知栏与分类订阅” 系统
  • WordPress性能优化全攻略:从插件实战到系统级优化
  • [新启航]激光频率梳 3D 轮廓测量 - 蓝光机械 3D 扫描的工作原理及优缺点
  • 3DEXPERIENCE平台五大实用技巧指南
  • 彻底搞懂深度学习-模型压缩(减枝、量化、知识蒸馏)
  • 概率论第二讲——一维随机变量及其分布
  • ChartGPT深度体验:AI图表生成工具如何高效实现数据可视化与图表美化?
  • 【AndroidStudio】官网下载免安装版,AndroidStudio压缩版的配置和使用
  • Android Activity的启动流程
  • 将 Android 设备的所有系统日志(包括内核日志、系统服务日志等)完整拷贝到 Windows 本地
  • NGUI--三大基础控件
  • 服务器IP暴露被攻击了怎么办?
  • Transformer实战——使用 run_glue.py 微调模型
  • SQLalachemy 错误 - Lost connection to MySQL server during query
  • 门控MLP(Qwen3MLP)与稀疏混合专家(Qwen3MoeSparseMoeBlock)模块解析
  • React Hooks useContext
  • 【Linux】Linux 的 cp -a 命令的作用
  • 基于FPGA实现CRC校验码算法(以MODBUS中校验码要求为例)verilog代码+仿真验证
  • LeetCode刷题-top100( 矩阵置零)
  • 算法模板(Java版)_DFS与BFS