ConstructiCat Logo
CodeBust.
Browse section ▾

Замена переменной вызовом метода.

Problem

Вы помещаете результат какого-то выражения в локальную переменную, чтобы использовать её далее в коде.

Solution

Выделите все выражение в отдельный метод и возвращайте результат из него. Замените использование вашей переменной вызовом метода. Новый метод может быть использован и в других методах.

##Example

Before
double calculateTotal() {
  double basePrice = quantity * itemPrice;
  if (basePrice > 1000) {
    return basePrice * 0.95;
  }
  else {
    return basePrice * 0.98;
  }
}
After
double calculateTotal() {
  if (basePrice() > 1000) {
    return basePrice() * 0.95;
  }
  else {
    return basePrice() * 0.98;
  }
}
double basePrice() {
  return quantity * itemPrice;
}

##Why Refactor

Применение данного рефакторинга может быть подготовительным этапом для применения выделения метода для какой-то части очень длинного метода.

Кроме того, иногда можно найти это же выражение и в других методах, что заставляет задуматься о создании общего метода для его получения.

##Benefits

  • Улучшает читабельность кода. Намного проще понять, что делает метод getTax() чем строка orderPrice() * -2.

  • Помогает убрать дублирование кода, если заменяемая строка используется более чем в одном методе.

##How to Refactor

  1. Убедитесь, что переменной в пределах метода присваивается значение только один раз. Если это не так, используйте расщепление переменной для того, чтобы гарантировать, что переменная будет использована только для хранения результата вашего выражения.

  2. Используйте извлечение метода для того, чтобы переместить интересующее вас выражение в новый метод. Убедитесь, что этот метод только возвращает значение и не меняет состояние объекта. Если он как-то влияет на видимое состояние объекта, используйте разделение запроса и модификатора.

  3. Замените использование переменной вызовом вашего нового метода.