Dart:
Рефакторинг

Как это делать:

Пример 1: Переименование и извлечение методов

До рефакторинга у вас может быть кусок кода, который смешивает разные уровни абстракции или ответственности, например, расчет скидки, а затем ее применение:

void main() {
  var price = 100.0;
  var discount = 0.2;
  var finalPrice = price - (price * discount);
  print("Финальная цена: $finalPrice");
}

Вывод:

Финальная цена: 80.0

После рефакторинга вы можете извлечь расчет скидки в свой собственный метод и дать ему значимое имя:

void main() {
  var price = 100.0;
  var discount = 0.2;
  var finalPrice = calculateFinalPrice(price, discount);
  print("Финальная цена: $finalPrice");
}

double calculateFinalPrice(double price, double discount) {
  return price - (price * discount);
}

Вывод:

Финальная цена: 80.0

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

Пример 2: Упрощение условных выражений

До рефакторинга условные операторы могут быть слишком сложными или трудночитаемыми:

void main() {
  var customerType = "regular";
  double discount;
  
  if (customerType == "regular") {
    discount = 0.05;
  } else if (customerType == "member") {
    discount = 0.1;
  } else {
    discount = 0.0;
  }

  print("Скидка: $discount");
}

Вывод:

Скидка: 0.05

После рефакторинга рассмотрите использование карты для более четкой структуры и упрощения обновлений или расширений типов клиентов и скидок:

void main() {
  var customerType = "regular";
  var discounts = {
    "regular": 0.05,
    "member": 0.1,
    "none": 0.0,
  };

  var discount = discounts[customerType] ?? 0.0;
  print("Скидка: $discount");
}

Вывод:

Скидка: 0.05

Этот рефакторинг не только делает код более сжатым, но также инкапсулирует логику определения скидок таким образом, что понимать и поддерживать ее становится легче.

Сторонние библиотеки для рефакторинга

Когда речь идет о рефакторинге в Dart, особенно в приложениях Flutter, набор инструментов Dart DevTools оказывается бесценным. В него входят инструменты для анализа производительности, инспектор виджетов и отладчик на уровне исходного кода. Хотя это и не сторонняя библиотека, Dart DevTools часто используется вместе с библиотеками вроде flutter_bloc для чистого управления состоянием, что способствует рефакторингу с целью повышения модульности и читаемости. К сожалению, из-за ограниченности данной статьи, конкретные примеры кода, использующего сторонние библиотеки, здесь не будут приведены, но разработчикам рекомендуется изучить эти инструменты для улучшения процесса рефакторинга в своих приложениях на Dart/Flutter.