Логотип ConstructiCat
CodeBust.
Навигация по разделу ▾

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

Проблема

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

Решение

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

##Пример

До
double calculateTotal() {
  double basePrice = quantity * itemPrice;
  if (basePrice > 1000) {
    return basePrice * 0.95;
  }
  else {
    return basePrice * 0.98;
  }
}
После
double calculateTotal() {
  if (basePrice() > 1000) {
    return basePrice() * 0.95;
  }
  else {
    return basePrice() * 0.98;
  }
}
double basePrice() {
  return quantity * itemPrice;
}

##Зачем делать рефакторинг

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

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

##Преимущества

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

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

##Как делать рефакторинг

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

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

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