Dart:
Refaktoryzacja
Jak to zrobić:
Przykład 1: Zmiana nazw i wydzielanie metod
Przed refaktoryzacją możesz mieć fragment kodu, który miesza różne poziomy abstrakcji lub odpowiedzialności, jak obliczanie zniżki, a następnie jej stosowanie:
void main() {
var cena = 100.0;
var zniżka = 0.2;
var cenaKońcowa = cena - (cena * zniżka);
print("Cena końcowa: $cenaKońcowa");
}
Wynik:
Cena końcowa: 80.0
Po refaktoryzacji możesz wydzielić obliczenie zniżki do własnej metody i nadać jej znaczącą nazwę:
void main() {
var cena = 100.0;
var zniżka = 0.2;
var cenaKońcowa = obliczCenaKońcowa(cena, zniżka);
print("Cena końcowa: $cenaKońcowa");
}
double obliczCenaKońcowa(double cena, double zniżka) {
return cena - (cena * zniżka);
}
Wynik:
Cena końcowa: 80.0
Dzięki wydzieleniu obliczenia do metody, masz teraz jasno określoną operację, która może być ponownie używana, testowana niezależnie i łatwo modyfikowana.
Przykład 2: Uproszczenie wyrażeń warunkowych
Przed refaktoryzacją, instrukcje warunkowe mogą być zbyt skomplikowane lub trudne do odczytania:
void main() {
var typKlienta = "regularny";
double zniżka;
if (typKlienta == "regularny") {
zniżka = 0.05;
} else if (typKlienta == "członek") {
zniżka = 0.1;
} else {
zniżka = 0.0;
}
print("Zniżka: $zniżka");
}
Wynik:
Zniżka: 0.05
Po refaktoryzacji, rozważ użycie mapy dla bardziej przejrzystej struktury i łatwiejszych aktualizacji lub rozszerzeń typów klientów i zniżek:
void main() {
var typKlienta = "regularny";
var zniżki = {
"regularny": 0.05,
"członek": 0.1,
"brak": 0.0,
};
var zniżka = zniżki[typKlienta] ?? 0.0;
print("Zniżka: $zniżka");
}
Wynik:
Zniżka: 0.05
Ta refaktoryzacja nie tylko czyni kod bardziej zwięzłym, ale także kapsułkuje logikę ustalania zniżek w sposób, który jest łatwiejszy do zrozumienia i utrzymania.
Biblioteki stron trzecich do refaktoryzacji
Jeśli chodzi o refaktoryzację w Dart, zwłaszcza w aplikacjach Flutter, zestaw narzędzi Dart DevTools jest nieoceniony. Zawiera narzędzia do monitorowania wydajności, inspektora widżetów i debugera na poziomie źródła. Mimo że Dart DevTools nie jest biblioteką stron trzecich, często używa się go wraz z bibliotekami takimi jak flutter_bloc
do czystego zarządzania stanem w sposób sprzyjający refaktoryzacji dla lepszej modularności i czytelności. Niestety, ze względu na zakres tego wpisu, tutaj nie zostaną przedstawione konkretne przykłady kodu z użyciem bibliotek stron trzecich, ale deweloperzy są zachęcani do eksplorowania tych narzędzi w celu ulepszenia procesu refaktoryzacji w ich aplikacjach Dart/Flutter.