摘要:业务规则:// 根据FDA 21 CFR Part 11规范:// - 必须记录操作者// - 审计日志保留10年void saveMedicalRecord {...}非直观实现:# 使用曼哈顿距离而非欧式距离:# - 避免浮点运算(性能敏感场景)# - 客
优质注释案例(来自Linux内核):
/** 内存屏障:确保在修改指针前,* 所有数据对DMA引擎可见* @param addr 必须4KB对齐*/void set_dma_addr(void *addr) {// 详见ARM手册B2.3.4节asm volatile("dmb ish" ::: "memory");}真实场景还原:
# 坏例子:某未注释的加密函数def f(x): return ((x >> 2) ^ 0xDEADBEEF) & 0xFF# 新同事被迫"考古":# 1. 为什么要右移2位?# 2. 魔数0xDEADBEEF的由来?# 3. 为什么最后取8位?优雅草科技内部数据:
有完整注释的代码,接手速度提升3倍无注释的”祖传代码”,调试时间占比60%+示例:
/*** struct device - 核心设备模型* @name: 设备名称(显示给用户)* @power: 当前电源状态(见POWER_*常量)* @lock: 防止并发操作的自旋锁*/struct device {char *name;int power;spinlock_t lock;};反例:即使Clean Code大师Bob Martin的书里:
// 自解释?其实隐藏业务知识if (employee.age > 65 && employee.years > 30) {...}// 加上注释才完整// 根据《劳动法》第45条:// - 65岁以上且工龄超30年可提前退休if (employee.age > 65 && employee.years > 30) {...}将注释纳入CI检查:# .github/workflows/comment-check.yml- name: 验证注释run: |grep -r "TODO:" src/ && exit 1 || exit 0文档即测试(Doctest):def add(a, b):"""返回两数之和>>> add(2, 3)5>>> add(-1, 1)0"""return a + b未注释代码(某客户遗留系统):
void ProcessData {var x = GetData.Where(d => d > 10);Save(x.Take(20));}重构后:
/// 处理传感器数据并存储:/// 1. 过滤异常值( r > 10);SaveToDatabase(validReadings.Take(20));}指标改进前改进后新功能开发速度5人日/功能3人日/功能Bug修复时间平均4小时平均1.5小时新人上手周期2个月2周正如优雅草科技在Code Review中的铁律:
“提交代码时,注释覆盖率必须≥80%”
——这不是技术问题,而是对同事时间的尊重
在AI辅助开发的今天,写注释的边际成本已趋近于零,但带来的长期收益却是指数级的。用卓伊凡的话说:
“不写注释的程序员,就像不画图纸的建筑师——也许能搭个狗窝,但永远建不起摩天大楼。”
行动建议:
从现在开始,为每个函数添加一行注释,你的未来职业发展会感谢这个习惯。
来源:kk是2个字母