每个程序员都能写出能运行的代码,但写出整洁、易读、易维护的代码,才是真正的功力。Robert C. Martin 在《Clean Code》中说:"任何一个傻瓜都能写出计算机可以理解的代码,唯有优秀的程序员才能写出人类可以理解的代码。"以下是我在日常开发中总结的 7 个值得养成的编码习惯。
1. 有意义的命名
变量名、函数名、类名都应该传达意图。当你看到 elapsedTimeInMs 时,你立刻知道这是一个以毫秒为单位的耗时值;而看到 t 时,你完全不知道它代表什么。
// ❌ 不好的命名 let d = new Date(); let list = getUsers(); // ✅ 有意义的命名 let currentDate = new Date(); let activeUsers = getUsers();
好的命名让代码"自文档化",减少注释的必要性。命名时问自己:三个月后的人(可能是你自己)看到这个名称,能理解它的含义吗?
2. 函数只做一件事
一个函数应该只做一件事,并且做好这件事。如果你发现一个函数超过 20 行,或者需要用"首先...然后...最后..."来描述它的逻辑,那它很可能承担了太多职责。
// ❌ 一个函数做了太多事
function handleUserInput(input) {
// 验证输入
if (!input || input.length < 3) {
throw new Error('Invalid input');
}
// 解析数据
const parsed = JSON.parse(input);
// 保存到数据库
db.save('users', parsed);
// 发送通知邮件
email.send(parsed.email, 'Welcome!');
}
// ✅ 拆分为多个小函数
function handleUserInput(input) {
validateInput(input);
const parsed = parseInput(input);
saveUser(parsed);
sendWelcomeEmail(parsed);
}
3. 避免魔法数字
代码中不应该出现没有解释的数字常量。把魔法数字提取为命名常量,代码的可读性会大幅提升。
// ❌ 魔法数字
if (password.length < 8) { ... }
setTimeout(cleanup, 86400000);
// ✅ 命名常量
const MIN_PASSWORD_LENGTH = 8;
const ONE_DAY_MS = 24 * 60 * 60 * 1000;
if (password.length < MIN_PASSWORD_LENGTH) { ... }
setTimeout(cleanup, ONE_DAY_MS);
4. 保持一致的代码风格
团队内统一代码风格不是强迫症,而是降低认知负担的必要手段。变量用驼峰还是下划线?缩进用空格还是 Tab?大括号换行还是不换行?这些都不重要——重要的是团队保持一致。建议使用 ESLint、Prettier 等工具自动化格式检查。
5. 写好注释,但更好的代码不需要注释
注释应该是解释"为什么",而不是"做了什么"。如果代码本身足够清晰,注释反而会成为噪音。但如果有一段业务逻辑背后的原因不显而易见,一定要写注释说明。
好的代码让读者理解"做了什么",好的注释让读者理解"为什么这么做"。
6. 错误处理不能偷懒
空的 catch 块是定时炸弹。捕获异常后至少要记录日志,最好能给调用者有意义的错误信息。吞掉异常会让问题在更深层、更难排查的地方爆发。
// ❌ 吞掉异常
try {
processPayment(order);
} catch (e) {
// 什么都不做
}
// ✅ 正确处理
try {
processPayment(order);
} catch (e) {
logger.error(`支付处理失败: orderId=${order.id}`, e);
throw new PaymentException('支付处理失败,请稍后重试', e);
}
7. 小步提交,频繁提交
每次提交应该是一个完整的逻辑单元。小步提交让 Git 历史变成清晰的叙事线,方便回溯、Review 和协作。避免"一天提交 2000 行代码"这种大爆炸式提交。
小结
写整洁代码不是一朝一夕的事,而是持续练习的习惯。这 7 个习惯不需要一次性全部掌握,可以从今天开始挑一两个最有感触的,在下一次编码时就有意识地实践。久而久之,你会发现自己的代码质量有了质的飞跃。