如何编写干净的代码:重构和最佳实践
说实话,每个开发人员(是的,即使是那些拥有多年经验的开发人员)都曾在某个时候发送过混乱的代码。
编写简洁的代码并非什么精英技能,而是一种可以养成的习惯。至于重构?这正是让你的代码真正有意义的机会——对你本人以及之后需要维护代码的人来说都是如此。
让我们来分解一下。没有空谈,没有抽象的理论。只有实用的技巧,帮助你编写干净、可维护的代码。
1. 按照你的意思命名
变量和函数需要讲述一个故事。
不x
,不temp
,不data
。这些只是为了混淆而设置的占位符。
✅好: getUserProfile()
❌坏: getData()
✅好: maxLoginAttempts
❌坏: m
当你很好地命名事物时,你的代码就会自我解释——无需侦探工作。
2. 少即是多:功能大小的力量
如果您像浏览文章一样浏览某个功能,则说明出现了问题。
长函数难以阅读、调试和维护。相反,应该将它们分解成更小的、单一用途的函数。
可以这样想:每个函数应该回答一个问题。如果它要回答五个问题,那就把它拆开。
例子:
// Instead of this
function processUserData(user) {
validateUser(user);
saveToDatabase(user);
sendEmail(user.email);
}
// Do this
function validateAndSaveUser(user) {
validateUser(user);
saveToDatabase(user);
}
function notifyUser(email) {
sendEmail(email);
}
这会使你的代码更易于阅读和重用。未来你会感谢你。
3. 一致性是关键
你是否曾经参与过一个项目,在一个地方userList
被调用,在另一个地方被调用?一片混乱。users
activeUsersArray
保持命名约定、缩进和格式的一致性。当你的代码遵循可预测的模式时,它会更易于阅读,也更易于调试。
✅好: userList, orderList, productList
❌坏: users, ordersList, listOfProducts
选择一个惯例并坚持下去。没有意外。
4. 有目的地评论,而不是出于习惯
注释应该解释“为什么”,而不是“做什么”。如果你的代码需要注释来解释它的作用,请重写代码。
例子:
// ❌ Bad Comment
// Increase count by 1
count = count + 1;
// ✅ Good Comment
// Edge case: Prevents counter from going negative
if (count > 0) {
count--;
}
写出有价值的评论,而不是那些显而易见的评论。
5. 魔术数字和硬编码值——摆脱它们
你见过一个函数里包含随机数吗?没错,这简直就是维护的噩梦。
相反,使用常量使这些值有意义。
例子:
// ❌ Bad
if (user.loginAttempts > 3) {
lockAccount(user);
}
// ✅ Good
const MAX_LOGIN_ATTEMPTS = 3;
if (user.loginAttempts > MAX_LOGIN_ATTEMPTS) {
lockAccount(user);
}
好多了。
6. DRY:不要重复自己
重复的代码总是会被打破。如果你发现自己在复制粘贴代码,请停止。创建可复用的函数或模块。
例子:
// ❌ Bad: Duplicated logic
sendEmail(user.email, "Welcome!");
sendEmail(admin.email, "New user registered!");
// ✅ Good: Reusable function
function sendNotification(email, message) {
sendEmail(email, message);
}
sendNotification(user.email, "Welcome!");
sendNotification(admin.email, "New user registered!");
这样,当需要更改时,您只需在一个地方进行更新。
7. 保持代码稳定
如果你还没听说过SOLID 原则,现在是时候开始学习了。这五条简单的规则,可以让你的代码更简洁、更易于维护。
如果没有别的,就从这个开始:单一责任原则。
➡每个函数/类都应该做一件事,并且做好它。
如果您的类同时处理用户身份验证和数据库存储,那么是时候进行重构了。
8. 坚决重构
编写干净的代码不是一次性的事情,而是一种习惯。
每次检查代码时,都要寻找改进方法:
- 为了更清楚起见,您可以重命名变量吗?
- 你能分解一个巨大的函数吗?
- 你能删除不必要的评论吗?
不要等待重大重写 -随时进行重构。
例子:
// ❌ First draft
function fetchUserData(userId) {
return fetch(`https://api.example.com/user/${userId}`)
.then(response => response.json())
.catch(error => console.error(error));
}
// ✅ Refactored
async function fetchUserData(userId) {
try {
const response = await fetch(`https://api.example.com/user/${userId}`);
return await response.json();
} catch (error) {
console.error(error);
}
}
重构并不意味着你的第一次尝试是糟糕的——它意味着你正在使它变得更好。
如果可以的话:
✅ 清晰地命名
✅ 保持函数小
✅ 保持一致
✅ 避免硬编码
✅ 经常重构
...你已经遥遥领先了。
文章来源:https://dev.to/balrajola/how-to-write-clean-code-refactoring-and-best-practices-315h