在软件开发中,方法(函数)是程序逻辑的基本单元。一个高质量的方法不仅决定了程序是否能正常运行,更直接影响到:
如果你每天花 10 分钟写一个方法,但别人每次阅读它要花 30 分钟,那这个方法就值得重构。
函数级重构的目标是:写出简洁、清晰、职责单一、易于理解的方法。
方法名应像一句完整的句子,说明“它做了什么”,而不是“怎么做的”。
一个方法只做一件事,并做好它。避免在一个方法里同时处理多个任务。
理想情况下,一个方法不超过 20 行,最长不应超过 50 行。
建议控制在 3 个以内,否则考虑封装成对象。
返回类型统一,避免 null,尽量使用 Optional。
避免多层 if/else,减少条件判断复杂度。
推荐 | 不推荐 |
---|---|
calculateTotalPrice() |
doCalculation() |
sendEmailNotification() |
process() |
// ❌ 模糊不清
public void process();
// ✅ 清晰表达意图
public void sendEmailNotification();
动词 | 含义 | 示例 |
---|---|---|
getXXX | 获取数据 | getUserById() |
isXXX | 判断状态 | isUserActive() |
validateXXX | 校验合法性 | validateRegistration() |
createXXX | 创建对象 | createOrder() |
updateXXX | 修改状态 | updateProfile() |
// ❌ 没有表达清楚含义
public void handleData();
// ✅ 更清晰地表达目的
public void parseUserInput();
public void transformResponse();
// ❌ 名字含糊
public void process();
// ✅ 改进后,清晰表达行为
public void sendEmailNotification();
一个方法应该只完成一个职责,如果有多个动作,应该拆分为多个方法。
// ❌ 一个方法干了三件事
public void processOrder() {
// 1. 查询订单
// 2. 计算价格
// 3. 发送通知
}
// ✅ 正确做法:拆分成三个职责清晰的方法
public void processOrder() {
Order order = fetchOrder();
double total = calculateTotal(order);
notifyCustomer(total);
}
private boolean hasStreet(Address address) {
return address.getStreet() != null;
}
private String buildStreetPart(Address address) {
return address.getStreet() + ", ";
}
// 使用 Optional 替代 null 判断
Optional.ofNullable(user).ifPresent(this::sendWelcomeEmail);
interface DiscountStrategy {
double apply(double amount);
}
class PremiumDiscount implements DiscountStrategy {