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.