为什么写注释也很重要
刚入行那会儿,我总觉得只要代码能跑通,怎么写都行。直到有次项目上线前,组长让我改一段“老代码”,打开文件一看,满屏都是变量和函数调用,没有一句解释。我愣是花了三个小时才搞明白那段逻辑是干啥的。后来才知道,那代码就是我自己三个月前写的……
好注释像便签条,随手一贴就明白
写代码不是写天书,团队协作时,别人要看,过几个月你自己也得看。这时候,注释就是贴在代码边上的小便签,告诉别人“这里为啥这么写”。
比如你看到一段处理时间戳的代码:
// 将用户提交的时间转换为服务器本地时间,避免跨时区显示错误
let localTime = new Date(timestamp * 1000 + timezoneOffset * 3600 * 1000);
没这句注释,别人可能以为你在修bug;有了它,一眼就知道这是为了兼容时区。
注释不是越多越好
见过那种每行代码下面都跟一句注释的项目吗?比如:
let sum = 0; // 定义一个变量sum,初始值为0
for (let i = 0; i < arr.length; i++) { // 循环遍历数组
sum += arr[i]; // 把每个元素加到sum里
}
// 返回总和
return sum;
这种注释纯属多余,代码自己已经说得很清楚了。真正需要注释的是那些“看起来奇怪但有原因”的地方。
这些情况值得加注释
当你写出以下类型的代码时,不妨停下来写句注释:
- 绕过某个框架限制的“奇技淫巧”
- 修复了一个隐蔽的bug,怕以后被人误删
- 用了不太常见的算法或数学公式
- 临时方案,后续要重构
比如:
// FIXME: 用户中心接口暂时不支持分页,先拉全量数据(仅限内部管理端)
const users = await fetchAllUsers();
不同语言的注释习惯
JavaScript 通常用 // 或 /** */:
// 计算折扣价格,注意:此规则仅适用于会员日
function getDiscount(price) {
return price * 0.8;
}
Python 喜欢用三引号写文档字符串:
def calculate_tax(income):
"""
根据年收入计算应缴税款
:param income: 年收入金额
:return: 应缴税额
"""
return income * 0.15
Java 或 TypeScript 中常见 JSDoc 风格:
/**
* 检查用户是否有权限执行操作
* @param userId 当前用户ID
* @param action 要执行的操作类型
* @returns {boolean} 是否允许
*/
function checkPermission(userId, action) { ... }
别把注释当遮羞布
有人觉得“反正有注释解释,代码乱点也没事”,这就本末倒置了。清晰的变量名、合理的函数拆分,比一百行注释都有用。
与其写:
// temp 是用来存筛选后的结果,a 是状态标记
let temp = [], a = true;
不如直接写成:
let filteredItems = [];
let isActive = true;
团队里的注释约定
我们组在项目初期就定了几条简单规则:
- 公共函数必须有说明注释
- 复杂逻辑块开头加一段解释
- 用
// TODO:标记待办事项 - 用
// FIXME:标出已知问题 - 删除无用代码时,顺手把注释也清掉
时间一长,大家看代码就像看说明书,谁都不用再问“这段是干啥的”。