随笔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;
}

个人感悟

读完这本书,我有几点深刻体会:

  1. 代码是艺术 - 好的代码应该像好的文学作品一样,清晰、优雅
  2. 重构是常态 - 代码需要不断重构,就像文章需要不断修改
  3. 测试是保障 - 没有测试的代码就像没有刹车的汽车
  4. 简单是美 - 不要过度设计,简单解决方案往往最好
  5. 持续学习 - 编程是一个不断学习的过程

实践建议

  1. 代码审查 - 让同事审查你的代码,也审查别人的代码
  2. 持续重构 - 每次修改都让代码更好一点
  3. 学习优秀代码 - 阅读开源项目的源码
  4. 编写测试 - 测试让你更有信心修改代码
  5. 遵循规范 - 使用团队统一的代码规范

推荐阅读

如果你对代码质量感兴趣,还推荐阅读:

  • 《重构:改善既有代码的设计》- Martin Fowler
  • 《设计模式》- GoF
  • 《程序员修炼之道》- Andrew Hunt & David Thomas
  • 《Clean Architecture》- Robert C. Martin
  • 《The Pragmatic Programmer》- Andrew Hunt & David Thomas

好的代码是一种习惯,需要不断练习和反思。让我们一起写出更整洁的代码!