Clean Code - 整洁代码 - 函数

小的函数

函数应该尽可能的短小。

低于20行,3到4行最好。

代码块与缩进

代码块最好只有一行,那一行代码可能是方法调用。

方法有一个描述性的名称。

缩进层级尽可能第小。

只做一件事

一个方法应该只做一件事。

每个方法只有一个抽象层次

代码阅读从上到下

switch语句

switch语句往往做了多件事,违反了单一职责原则与开闭原则。

public Money calculatePay(Employee e)
throws InvalidEmployeeType {
  switch (e.type) {
    case COMMISSIONED:
      return calculateCommissionedPay(e);
    case HOURLY:
      return calculateHourlyPay(e);
    case SALARIED:
      return calculateSalariedPay(e);
    default:
      throw new InvalidEmployeeType(e.type);
  }
}

使用抽象工厂方法,创建不同的子类。隐藏创建方式。

通过多态来实现不同的逻辑。

public abstract class Employee {
  public abstract boolean isPayday();
  public abstract Money calculatePay();
  public abstract void deliverPay(Money pay);
}
public interface EmployeeFactory {
  public Employee makeEmployee(EmployeeRecord r) throws InvalidEmployeeType;
}
public class EmployeeFactoryImpl implements EmployeeFactory {
  public Employee makeEmployee(EmployeeRecord r) throws InvalidEmployeeType {
    switch (r.type) {
      case COMMISSIONED:
      return new CommissionedEmployee(r) ;
      case HOURLY:
        return new HourlyEmployee(r);
      case SALARIED:
        return new SalariedEmploye(r);
      default:
        throw new InvalidEmployeeType(r.type);
    }
  }
}

使用描述性的名称

函数越短越容易找到一个描述性名称。

一个长的描述性名称比一个短的谜一般的名称好。

一个长的描述性名称比一个长的注释好。

保持命名一致性。

函数参数