为什么整洁代码很重要
我们都经历过——盯着一个 500 行的函数 wondering 它做了什么,不敢碰任何东西因为一个错误的操作就会破坏一切。整洁代码不是完美主义;它是对未来的自己和队友的同理心。
混乱代码的真实代价
技术债务像利息一样复利。你今天走的每一个捷径都让明天的工作更难。但与金融债务不同,你不能只是以后偿还——你每天都要承受后果。
看看这个重构之旅:
// 之前:一个做了太多事情的函数
function processUser(data: any) {
if (data.name && data.email) {
const user = db.findUser(data.email);
if (user) {
user.name = data.name;
if (data.avatar) user.avatar = data.avatar;
db.save(user);
sendEmail(user.email, "Profile updated");
return { success: true, user };
}
}
return { success: false };
}
// 之后:意图清晰,单一职责
async function updateProfile(input: ProfileInput): Promise<ProfileResult> {
const user = await findExistingUser(input.email);
if (!user) return ProfileResult.notFound();
user.updateProfile(input);
await user.save();
await notifyProfileUpdate(user);
return ProfileResult.success(user);
}
真正有用的原则
1. 用意图命名
变量名就是文档。d 什么也不代表。elapsedTimeInDays 说明了一切。
2. 函数应该讲述故事
一个命名良好的函数配合命名良好的参数读起来就像一句话:
await sendWelcomeEmail(newSubscriber, premiumTemplate);
3. 拥抱不可变性
可变状态是许多 bug 的根源。当数据不会意外改变时,对代码的推理变得显著更容易。
专业提示: 在 TypeScript 中使用
readonly 和 as const 在类型层面强制不可变性。
更大的图景
整洁代码是一种实践,不是一个终点。你不会每次都写出完美的代码,这没关系。重要的是趋势——你的代码库是在变得更整洁还是更混乱?
任何傻瓜都能写出计算机能理解的代码。优秀的程序员写出人类能理解的代码。—— Martin Fowler
从小处开始。今天重构一个函数。给一个变量取个更好的名字。删除一行死代码。这些小改进的复利效应是变革性的。