引言:为什么整洁代码不是奢侈品,而是必需品
每位开发者至少都遇到过那种不喝杯咖啡、不冥想一会儿就看不懂的代码。变量名是 a、b、temp,方法长达500行,注释写着“这里有魔法,别动”——这些都是项目正在变成“遗留系统”的明确信号。Clean Code(整洁代码)是一种理念和一套实践,能让代码变得可读、易于维护和扩展。
在本文中,我们将通过具体示例,用 Java 语言解析 Clean Code 的关键原则。你将学会如何编写那种半年后你自己和同事都会感激的代码。
原则1:有意义的命名
变量、方法或类的名称应该回答三个问题:它是什么,为什么需要它,以及如何使用它。糟糕的命名是混乱的主要来源。
糟糕的示例
public List<Integer> getList(int a) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < a; i++) {
list.add(i * 2);
}
return list;
}
这个方法做了什么?a 是什么?它返回的是偶数列表吗?还是仅仅把某些东西乘以二?
好的示例(Clean Code)
public List<Integer> generateEvenNumbers(int count) {
List<Integer> evenNumbers = new ArrayList<>();
for (int i = 0; i < count; i++) {
evenNumbers.add(i * 2);
}
return evenNumbers;
}
现在无需注释也一目了然:这个方法生成指定长度的偶数列表。
命名规则
- 类:名词(
User,PaymentProcessor) - 方法:动词(
saveUser(),calculateTotal()) - 变量:有含义的名词(
userName,totalPrice) - 避免:缩写(
usrNm),单字母名称(循环计数器i、j除外)
原则2:单一职责的小方法
一个方法应该只做一件事,并且把它做好。如果一个方法可以用“并且”来描述(先做A,并且再做B),那么它就应该被拆分。
糟糕的示例:单体方法
public void processOrder(Order order) {
// 验证
if (order.getItems().isEmpty()) {
throw new IllegalArgumentException("Order is empty");
}
// 计算总价
double total = 0;
for (Item item : order.getItems()) {
total += item.getPrice() * item.getQuantity();
}
// 发送邮件
EmailService.send(order.getCustomerEmail(), "Your order total: " + total);
// 保存到数据库
orderRepository.save(order);
}
这个方法做了4件事:验证、计算、发送邮件和保存。如果出了问题,得在整个方法里找原因。
好的示例:整洁的方法
public void processOrder(Order order) {
validateOrder(order);
double total = calculateTotal(order);
sendConfirmationEmail(order, total);
saveOrder(order);
}
private void validateOrder(Order order) {
if (order.getItems().isEmpty()) {
throw new IllegalArgumentException("Order cannot be empty");
}
}
private double calculateTotal(Order order) {
return order.getItems().stream()
.mapToDouble(item -> item.getPrice() * item.getQuantity())
.sum();
}
private void sendConfirmationEmail(Order order, double total) {
String message = "Your order total: " + total;
EmailService.send(order.getCustomerEmail(), message);
}
private void saveOrder(Order order) {
orderRepository.save(order);
}
每个方法都是一块积木。它们