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.