随笔5 min read
《代码整洁之道》读书笔记
为什么要读这本书?
写代码容易,写好代码难。《代码整洁之道》告诉我们,代码不仅仅是给机器看的,更是给人看的。
Robert C. Martin(人称 Uncle Bob)在这本书中分享了他多年的编程经验,教会我们如何写出整洁、可维护的代码。
核心观点
1. 有意义的命名
命名是代码中最重要的一部分。好的命名能让代码自解释。
# 不好的命名
d = 86400
temp = get_data()
calc(a, b)
# 好的命名
SECONDS_PER_DAY = 86400
user_data = get_user_data()
calculate_total_price(quantity, unit_price)
命名应该:
- 揭示意图
- 避免误导
- 可发音
- 可搜索
- 避免编码
2. 函数应该小
函数应该尽可能小,只做一件事。
// 不好的写法 - 函数太大
function processUserData(user) {
// 验证用户
if (!user.name) throw new Error('Name required');
if (!user.email) throw new Error('Email required');
// 格式化数据
user.name = user.name.trim();
user.email = user.email.toLowerCase();
// 保存到数据库
db.save(user);
// 发送邮件
email.send(user.email, 'Welcome!');
// 记录日志
logger.info('User created: ' + user.name);
}
// 好的写法 - 拆分成小函数
function validateUser(user) {
if (!user.name) throw new Error('Name required');
if (!user.email) throw new Error('Email required');
}
function formatUserData(user) {
user.name = user.name.trim();
user.email = user.email.toLowerCase();
}
function saveUser(user) {
db.save(user);
}
function sendWelcomeEmail(email) {
email.send(email, 'Welcome!');
}
function logUserCreation(userName) {
logger.info('User created: ' + userName);
}
function processUserData(user) {
validateUser(user);
formatUserData(user);
saveUser(user);
sendWelcomeEmail(user.email);
logUserCreation(user.name);
}
3. 注释不能弥补糟糕的代码
好的代码应该是自解释的。如果需要写注释来解释代码,说明代码还不够清晰。
// 不好的注释
// 检查用户年龄是否大于 18
if (user.age > 18) { ... }
// 好的代码 - 不需要注释
if (user.isAdult()) { ... }
// 不好的注释
// 如果状态是活跃的,并且类型是管理员
if (status == 1 && type == 2) { ... }
// 好的代码
if (isActive && isAdmin) { ...}
4. 错误处理
错误处理应该优雅,不能影响代码的整洁性。
# 不好的写法
try:
process_order(order)
except:
pass
# 好的写法
try:
process_order(order)
except InvalidOrderError as e:
logger.error(f"订单处理失败: {e}")
notify_user(order.user, "订单无效")
raise
except PaymentError as e:
logger.error(f"支付失败: {e}")
notify_user(order.user, "支付失败,请重试")
except Exception as e:
logger.error(f"未知错误: {e}")
notify_admin(e)
raise
5. 格式化
代码格式化很重要,它影响代码的可读性。
// 不好的格式
function calculateTotal(price,quantity,tax){return price*quantity*(1+tax);}
// 好的格式
function calculateTotal(price, quantity, tax) {
const subtotal = price * quantity;
const total = subtotal * (1 + tax);
return total;
}
个人感悟
读完这本书,我有几点深刻体会:
- 代码是艺术 - 好的代码应该像好的文学作品一样,清晰、优雅
- 重构是常态 - 代码需要不断重构,就像文章需要不断修改
- 测试是保障 - 没有测试的代码就像没有刹车的汽车
- 简单是美 - 不要过度设计,简单解决方案往往最好
- 持续学习 - 编程是一个不断学习的过程
实践建议
- 代码审查 - 让同事审查你的代码,也审查别人的代码
- 持续重构 - 每次修改都让代码更好一点
- 学习优秀代码 - 阅读开源项目的源码
- 编写测试 - 测试让你更有信心修改代码
- 遵循规范 - 使用团队统一的代码规范
推荐阅读
如果你对代码质量感兴趣,还推荐阅读:
- 《重构:改善既有代码的设计》- Martin Fowler
- 《设计模式》- GoF
- 《程序员修炼之道》- Andrew Hunt & David Thomas
- 《Clean Architecture》- Robert C. Martin
- 《The Pragmatic Programmer》- Andrew Hunt & David Thomas
好的代码是一种习惯,需要不断练习和反思。让我们一起写出更整洁的代码!