JavaScript:
Refaktoryzacja
Jak to zrobić:
Spójrzmy na prosty przykład, gdzie refaktoryzacja może uczynić twój kod bardziej zwięzłym i czytelnym. Oto jak refaktoryzujemy funkcję, która oblicza sumę tablicy liczb.
Przed:
function calculateSum(arr) {
let sum = 0;
for (let i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
console.log(calculateSum([1, 2, 3, 4])); // Wynik: 10
Po:
function calculateSum(arr) {
return arr.reduce((sum, num) => sum + num, 0);
}
console.log(calculateSum([1, 2, 3, 4])); // Wynik: 10
Widzisz, jak metoda reduce
zmniejsza rozmiar funkcji, zachowując przy tym jej funkcjonalność? To właśnie refaktoryzacja.
Głębsze zanurzenie
Refaktoryzacja nie pojawiła się jako formalna praktyka aż do publikacji książki Martina Fowlera “Refactoring: Improving the Design of Existing Code” w 1999 roku. Ta książka, wraz z rozwojem zwinnych metod wytwarzania oprogramowania, pomogła wprowadzić refaktoryzację do głównego nurtu.
Opisywanie refaktoryzacji jako aspektu wytwarzania oprogramowania jest jak tłumaczenie, dlaczego warto sprzątać warsztat: robisz to, aby następnym razem, gdy będziesz musiał coś naprawić (w tym przypadku kod), spędzić mniej czasu na radzeniu sobie z bałaganem, a więcej na faktycznym problemie.
Gdy mówimy o alternatywach dla refaktoryzacji, wchodzimy w szerszą dyskusję na temat strategii utrzymania oprogramowania. Można by wybrać pełne przepisanie kodu, ale jest to często droższe i ryzykowniejsze. Refaktoryzując stopniowo, czerpiesz ciągłe korzyści bez zatapiania statku przez nagłą przebudowę.
Refaktoryzacja została wspomagana przez rozwój zintegrowanych środowisk programistycznych (IDEs) oraz narzędzi takich jak JSHint, ESLint i Prettier w ekosystemie JavaScript, które automatyzują sprawdzanie jakości kodu i wskazują możliwości do refaktoryzacji.
Chodzi o to, aby kod był czysty, wyrazisty i łatwy w utrzymaniu. W ramach procesu refaktoryzacji mogą występować zaawansowane algorytmy, optymalizacje struktur danych, a nawet zmiany architektoniczne, jak przejście z programowania proceduralnego na funkcyjne.
Refaktoryzacja musi być przeprowadzana ostrożnie; istotne jest, aby mieć solidny zestaw testów, aby upewnić się, że zmiany nie zmieniły nieoczekiwanie zachowania oprogramowania—kolejny powód, dla którego Test-Driven Development (TDD) dobrze współgra z refaktoryzacją, gdyż domyślnie zapewnia tę siatkę bezpieczeństwa.
Zobacz również
Książka Martina Fowlera o refaktoryzacji: Refaktoryzacja - Ulepszanie projektu istniejącego kodu
Frameworki do testowania JavaScriptu (aby upewnić się, że refaktoryzacja nie zepsuje funkcjonalności):
Narzędzia do kontroli jakości kodu i wsparcia refaktoryzacji: