"Witam ponownie."

"Cześć!"

„Dzisiaj opowiem o refaktoryzacji. Refaktoryzacja to zmiana kodu w projekcie bez zmiany jego funkcjonalności.”

— Ale jak to możliwe?

„Cóż, w najprostszych przypadkach moglibyśmy zmieniać nazwy zmiennych i/lub metod. W końcu zmiana nazwy zmiennej nie sprawi, że program będzie działał inaczej, prawda?”

"Oczywiście nie."

„Możesz także podzielić duże metody na kilka mniejszych ” .

„Możesz wyciągnąć powtarzające się fragmenty kodu do osobnej metody ” .

„Niektóre funkcje można zadeklarować jako statyczne, a następnie przenieść do klas użytkowych”.

„Ale to wąska interpretacja refaktoryzacji”.

„Refactoring czasami oznacza przepisanie (ulepszenie) architektury projektu bez dodawania nowych funkcjonalności. Jest to refaktoryzacja w szerokim tego słowa znaczeniu”.

„IntelliJ IDEA stało się najpopularniejszym zintegrowanym środowiskiem programistycznym (IDE), ponieważ jako pierwsze wprowadziło bardzo wydajne narzędzia do refaktoryzacji”.

„Czym są te magiczne narzędzia?”

Magiczna sztuczka nr 1: Zmień nazwę metody.

„Wyobraź sobie, że Twój kod ma metodę, która jest wywoływana ze 100-500 różnych miejsc. Zdecydowałeś się zmienić jej nazwę na coś bardziej zrozumiałego. Powiedzmy, że jest to run() i chcesz, aby była to runDownloadTaskAsync(). Jak szybko możesz to zrobić?"

„Cóż, najpierw musisz zmienić nazwę metody, a następnie znaleźć wszystkie miejsca w programie, w których ta metoda jest wywoływana, i tam też zmienić nazwę”.

– A jak znalazłbyś te miejsca?

„Po prostu uruchomiłbym program, a IntelliJ IDEA pokazałby mi wszystkie miejsca, w których wywoływana jest nieistniejąca metoda”.

„W porządku. Ale teraz załóżmy, że każda metoda ma komentarz wyjaśniający (JavaDoc), który wyjaśnia, co robi ta metoda — i jest tam zapisana stara nazwa metody”.

„Zmieniłbym też komentarze”.

„Ale mogą też istnieć zmienne, których nazwy są powiązane z nazwą metody. Dobrze byłoby je też zmienić”:

Zanim Po
Task task = manager.run();
Task asyncTask = manager.runDownloadTaskAsync();

„Tak, dobrze byłoby też zmienić nazwy tych zmiennych. Nie zaszkodzi”.

„Cóż, wszystko to można zrobić w kilka sekund za pomocą IntelliJ IDEA!”

„Umieszczasz kursor na nazwie metody (lub klikasz ją myszką), a następnie naciskasz Shift+F6 i po prostu zaczynasz wpisywać żądaną nazwę metody”.

„Oto przykład edytowania nazwy metody”.

„Rozpocznij edycję:”

POMYSŁ: refaktoryzacja - 1

„Podaj nową nazwę:”

POMYSŁ: refaktoryzacja - 2

„Po prostu wprowadź nową nazwę, naciśnij enter i to wszystko. Nazwa tej metody zostanie zmieniona wszędzie tam, gdzie jest wywoływana w projekcie”.

„IntelliJ IDEA zwykle pyta również, czy chcesz zmienić nazwy zmiennych i nazwy metod w komentarzach. Po prostu kliknij„ Tak ”, a wszystko się zmieni”.

„Co więcej, jeśli projekt został skompilowany przed tą operacją refaktoryzacji, to gwarantowana jest kompilacja po refaktoryzacji”.

„Brzmi bardzo obiecująco”.

„Nawiasem mówiąc, możesz zmieniać nazwy zmiennych w ten sam sposób. Po kliknięciu nazwy po prostu naciśnij Shift+F6 — możesz wtedy wprowadzić nową nazwę, a IntelliJ zmieni nazwę zmiennej wszędzie tam, gdzie jest używana ” .

„Jeśli zmienna jest polem w klasie i ma getter i setter, to nazwy getter i setter również zostaną zmienione, aby pasowały do ​​nowej nazwy zmiennej”.

„Próbowałem tego, używając zmiennych. Wszystko działa tak, jak mówiłaś, Ellie. Refaktoryzacja jest niesamowita!”

„Myślisz, że refaktoryzacja to wszystko? Refraktoryzacja to tak szeroki temat — nawet nie zarysowaliśmy powierzchni”.

"Wow. Co jeszcze jest tam?"

Magiczna sztuczka nr 2: Wyodrębnij zmienną.

„Czasami pewne wyrażenia są powtarzane w kodzie tak często, że będziesz chciał przenieść je do osobnej zmiennej. Na przykład:”

Kod
public void printInfo(User user)
{
 System.out.println(user.getProfile().getName());
 System.out.println(user.getProfile().getAddress().getState());
 System.out.println(user.getProfile().getAddress().getCity());
 System.out.println(user.getProfile().getAddress().getStreet());
 System.out.println(user.getProfile().getAddress().getHomeNumber());
}
Jak chcesz, żeby to wyglądało:
public void printInfo(User user)
{
 Address address = user.getProfile().getAddress();

 System.out.println(user.getProfile().getName());
 System.out.println(address.getState());
 System.out.println(address.getCity());
 System.out.println(address.getStreet());
 System.out.println(address.getHomeNumber());
}

„Ach”.

„A kod może być znacznie bardziej skomplikowany, z wieloma powtarzającymi się częściami”.

„Programiści nie piszą tego w ten sposób celowo. Ale często będziesz musiał dodać coś do metody, a potem coś innego – az czasem liczba powtórzeń idzie w górę”.

„Tworząc osobną zmienną możemy nadać jej odpowiednią nazwę i poprawić czytelność kodu.”

„Na przykład w powyższym przykładzie być może nie mówimy o adresie domowym. Może mówimy o adresie kontaktu alarmowego. Wtedy możesz nazwać tę zmienną EmergencyContactAddress zamiast samego adresu. Następnie programista zobaczenie tego kodu po raz pierwszy pozwoli zrozumieć, co się tutaj dzieje”.

„Tak, zgadzam się. Dodawanie takich zmiennych ma sens”.

— Więc jak to robisz?

„Przeniesienie wyrażenia do osobnej zmiennej jest bardzo proste”.

Krok 1: Użyj myszki, aby wybrać wyrażenie.

POMYSŁ: refaktoryzacja - 3

Krok 2: naciśnij Ctrl + Alt + V

POMYSŁ: refaktoryzacja - 4

„Otworzy się okno, w którym IntelliJ IDEA pyta nas, czy chcemy zastąpić tylko wybrane wyrażenie, czy wszystkie wystąpienia wyrażenia (4 wystąpienia)?”

„Wybierz drugą opcję, aby zastąpić wszystkie wystąpienia (Zastąp wszystkie 4 wystąpienia)”

Krok 3: Naciśnij Enter.

POMYSŁ: refaktoryzacja - 5

„IntelliJ IDEA poprosi cię o podanie nazwy zmiennej. Zaproponuje również własną nazwę. Nieźle, co?”

„Uh-huh. Właśnie. Planowaliśmy również nazwać zmienną „adres”. Skąd ona wiedziała?”

„Używając nazwy ostatniej metody w wyrażeniu, która zwraca adres. Jest więc prawdopodobne, że zmienna będzie używana do przechowywania adresu”.

„Wyszło naprawdę dobrze. Świetna sprawa, Ellie”.

Magiczna sztuczka nr 3: wyodrębnij kod do osobnej metody.

„Ale mogliśmy zrobić coś innego. Mogliśmy zadeklarować nową metodę, np. printAddress () i przenieść do niej cały ten kod”.

— Spróbujmy to zrobić.

Krok 1: Wybierz 4 wiersze kodu, które używają zmiennej adresowej:

POMYSŁ: refaktoryzacja - 6

Krok 2: naciśnij Ctrl+Alt+M

POMYSŁ: refaktoryzacja - 7

„IntelliJ IDEA określa, jakich zmiennych będzie potrzebować metoda i sugeruje, jak powinna ona wyglądać. „Jedyne, co pozostaje, to wprowadzić nazwę metody”.

Krok 3: Wpisz printAddress jako nazwę metody i naciśnij Enter.

POMYSŁ: refaktoryzacja - 8

"Jak ci się to podoba?"

„To niesamowite. IntelliJ IDEA nie tylko wyodrębnił kod do oddzielnej metody, ale także dodał wszystkie wymagane zmienne. Co więcej, poprawnie odgadł wszystkie nazwy”.