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.pswp.cn/bicheng/95806.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95806.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95806.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轮轨法向接触斑计算

轮轨法向接触斑计算 &#xff0c;同时输出 接触斑面积、长轴 a、短轴 b、最大 Hertz 压力 pmax 等关键指标 算法基于 Hertz 接触理论&#xff08;适用于单点椭圆接触&#xff09;&#xff0c;并给出如何扩展到 非 Hertz / 有限元验证的提示。1 理论回顾&#xff08;Hertz 椭圆…

实习结束,秋招开启

大家好&#xff0c;依旧是你们的老朋友仰望-星空~~&#xff0c;我又消失了3个月&#xff0c;快四个月了&#x1f604;&#xff0c;不少文章都 落灰了。这段时间其实一直在忙着找实习&#xff0c;然后准备面试题、刷算法、做项目啥的&#xff0c;也是比较忙碌的&#xff0c;也就…

14 C++ STL 容器实战:stack/list 模拟实现指南 + priority_queue 用法及避坑技巧

stack和queuestack的模拟实现和应用--底层就是顺序表从栈的接口中可以看出&#xff0c;栈实际是一种特殊的vector&#xff0c;因此使用vector完全可以模拟实现stack。#include<vector> namespace Stack { template<class T> class stack { public:stack() {}void p…

Linux基础指令(入门必备2.0)

创作初心&#xff1a;在加深个人对知识系统理解的同时希望可以帮助到更多需要的同学 &#x1f604;柯一梦的专栏系列 &#x1f680;柯一梦的Gitee主页 &#x1f6e0;️柯一梦主页详情 座右铭&#xff1a;心向深耕&#xff0c;不问阶序&#xff1b;汗沃其根&#xff0c;花自满枝…

《失落之魂》M站评分仅40?国产动作类游戏究竟何去何从?

前段时间频频预热的国产动作游戏《失落之魂》已正式发售&#xff0c;外媒Push Square发布了该作的阶段性评测。评测指出&#xff0c;尽管《失落之魂》在规模上已接近3A级&#xff0c;但能感受到其独立制作的根基。这款游戏于2016年通过索尼“中国之星计划”获得支持&#xff0c…

一个专为地图制图和数据可视化设计的在线配色网站,可以助你制作漂亮的地图!

ColorBrewer 是一个专为地图制图和数据可视化设计的在线配色工具&#xff0c;由宾夕法尼亚州立大学地理学教授 Cynthia Brewer 及其团队开发 。 它提供了科学、美观且考虑周全的配色方案&#xff0c;旨在帮助用户&#xff08;无论是科研人员、设计师还是GIS分析师&#xff09;…

Python图像处理基础(十六)

Python图像处理基础(十六) 文章目录 Python图像处理基础(十六) 10、图像增强和滤镜 10.1 ImageEnhance 10.1.1 亮度 10.1.2 对比度 10.1.3 颜色 10.1.4 清晰度 10.2 ImageFilter 10.3 预定义滤镜 10.4 参数化滤镜 10.4.1 模糊函数 10.4.2 反锐化蒙版 10.4.3 排序和平均滤波…

python中等难度面试题(1)

1、请解释Python中的深拷贝(deep copy)和浅拷贝(shallow copy)的区别&#xff0c;并举例说明它们在实际应用中可能引发的问题。 答&#xff1a; 在Python中&#xff0c;拷贝对象通常指的是创建一个新的对象&#xff0c;这个新对象是原始对象的一个副本。拷贝可以分为两种类型&a…

AI+Java 守护你的钱袋子!金融领域的智能风控与极速交易

当你在异国他乡用信用卡支付酒店费用&#xff0c;手机瞬间弹出银行短信“是否为本人操作”&#xff1b;当你盯着股票行情软件&#xff0c;看着某只股票的股价在3秒内从涨停跌至平盘&#xff0c;懊悔手动下单慢了一步——这些金融场景中的“安全感”与“遗憾”&#xff0c;背后都…

Docker跨架构部署实操第二弹

1. 项目内容 项目目录包含 Dockerfile 与 main.py&#xff0c;并且容器内路径固定为&#xff1a; 数据&#xff1a;/root/autodl-tmp/data模型&#xff1a;/root/autodl-tmp/models保存&#xff1a;/root/autodl-tmp/save 服务端口&#xff1a;9011&#xff08;容器内与宿主映…

PyTorch 学习率调度器(LR Scheduler)

文章目录 PyTorch 学习率调度器&#xff08;LR Scheduler&#xff09;1. 一句话定义2. 通用使用套路3. 内置调度器对比速览4. 各调度器最小模板① LambdaLR&#xff08;线性 warmup&#xff09;② StepLR③ MultiStepLR④ CosineAnnealingLR⑤ ReduceLROnPlateau&#xff08;必…

新后端漏洞(上)- Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)

漏洞介绍&#xff1a;Spring Cloud Gateway是Spring中的一个API网关。其3.1.0及3.0.6版本&#xff08;包含&#xff09;以前存在一处SpEL表达式注入漏洞&#xff0c;当攻击者可以访问Actuator API的情况下&#xff0c;将可以利用该漏洞执行任意命令。漏洞环境&#xff1a;docke…

【OJ】C++ vector类OJ题

只出现过一次的数字&#xff08;简单&#xff09; 136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 这道题使用异或就非常简单了&#xff0c;所有数异或到一起&#xff0c;相同的数据双双消除&#xff0c;只剩下一个的数。 C语言异或运算详解-CSDN博客 clas…

为什么外网主机可以telnet通内网nginx端口,但是http请求失败?

问题是这样的:我内网主机nginx配置了 域名80端口&#xff0c;然后防火墙没有配置80端口&#xff0c;但是外网机子去telnet 80端口可以通&#xff0c;用浏览器请求域名不能访问nginx&#xff0c;然后防火墙开了80端口后&#xff0c;浏览器就可以访问nginx了&#xff0c;为什么防…

【Linux游记】基础指令篇

​​​​​​ 枫の个人主页 你不能改变过去&#xff0c;但你可以改变未来 算法/C/数据结构/C/Linux Hello&#xff0c;这里是小枫。C语言与数据结构和算法初阶两个板块都更新完毕&#xff0c;我们继续来学习C&#xff0c;C更新的同时我也会更新Linux。Linux操作系统是很经典的…

阿里云-基于通义灵码实现高效 AI 编码 | 4 | 场景学习:3分钟写一个音乐闹钟小应用

文章目录一、初版需求与代码生成二、需求迭代与代码更新三、需求细化与功能完善3.1 pygame安装3.2 放置音乐文件3.3 执行代码免费个人运维知识库&#xff0c;欢迎您的订阅&#xff1a;literator_ray.flowus.cn 一、初版需求与代码生成 首先向通义灵码提出了基本需求&#xff1…

【算法笔记】欧拉降幂公式与欧拉函数

欧拉降幂公式 在数论中&#xff0c;欧拉降幂公式是一个强大的工具&#xff0c;用于简化大指数模运算。公式如下&#xff1a; ∀k>φ(m)&#xff0c;有Ak≡Akmodφ(m)φ(m)(modm)成立。\forall k > \varphi(m)&#xff0c;有 A^k \equiv A^{k \mod \varphi(m) \varphi(m…

基于STM32的交通灯设计—紧急模式、可调时间

基于STM32交通灯设计&#xff08;仿真&#xff0b;程序&#xff0b;设计报告&#xff09;功能介绍具体功能&#xff1a;1.数码管和LED模拟交通灯&#xff1b;2.南北绿灯9秒&#xff0c;东西绿灯15秒&#xff0c;黄灯2秒&#xff1b;3.紧急情况&#xff1a;按下按键&#xff0c;…

汽车软件研发智能化:AI在CI/CD中的实践

当汽车行业加速驶入“软件定义”的时代&#xff0c;软件已成为决定车辆竞争力的核心要素。从智能座舱的多场景交互到自动驾驶的复杂决策逻辑&#xff0c;汽车软件的代码量逐年递增&#xff0c;复杂度呈指数级攀升&#xff0c;传统研发流程深陷困境&#xff1a;代码质量管控滞后…

DeepSeek:开启智能体驱动对话式数据分析新时代

在数字化浪潮汹涌澎湃的当下,数据已然成为驱动企业发展、推动科学研究以及优化日常生活决策的关键力量。数据分析,作为从海量数据中提取有价值信息、洞察趋势、挖掘规律的核心手段,其重要性不言而喻。无论是企业精准把握市场动态、优化运营流程,还是科研人员探索未知领域、…