"Hej igen."

"Hej!"

"I dag vil jeg fortælle dig om refactoring. Refactoring er at ændre koden i et projekt uden at ændre dets funktionalitet."

"Men hvordan er det muligt?"

"Jamen, i de simpleste tilfælde kunne vi omdøbe variabler og/eller metoder. Når alt kommer til alt, vil det at ændre navnet på en variabel ikke få programmet til at fungere anderledes, vel?"

"Selvfølgelig ikke."

"Du kan også dele store metoder op i flere mindre. "

"Du kan trække gentagne kodestykker ind i en separat metode. "

"Nogle funktioner kan erklæres statiske og derefter flyttes til hjælpeklasser."

"Men dette er en snæver fortolkning af refactoring."

"Refactoring betyder nogle gange at omskrive (forbedre) et projekts arkitektur uden at tilføje ny funktionalitet. Dette er refactoring i den brede betydning af begrebet."

"IntelliJ IDEA blev det mest populære integrerede udviklingsmiljø (IDE), specifikt fordi det var det første, der introducerede meget kraftfulde refaktoreringsværktøjer."

"Hvad er disse magiske værktøjer?"

Magisk trick #1: Skift en metodes navn.

"Forestil dig, at din kode har en metode, der kaldes fra 100-500 forskellige steder. Du har besluttet at ændre dens navn til noget mere forståeligt. Lad os sige, at den er run(), og du vil have den runDownloadTaskAsync(). Hvor hurtigt kan du gøre det?"

"Nå, først skal du ændre metodens navn, derefter finde alle de steder i programmet, hvor metoden kaldes, og ændre navnet der også."

"Og hvordan ville du finde de steder?"

"Jeg ville bare køre programmet, og IntelliJ IDEA ville vise mig alle de steder, hvor en ikke-eksisterende metode kaldes."

"Okay. Men antag nu, at hver metode har en forklarende kommentar (JavaDoc), der forklarer, hvad metoden gør - og det gamle metodenavn er skrevet der."

"Jeg ville også ændre kommentarerne."

"Men der kan også være variabler, hvis navne er forbundet med metodens navn. Det ville være godt at ændre dem også:"

Før Efter
Task task = manager.run();
Task asyncTask = manager.runDownloadTaskAsync();

"Ja, det ville være godt at ændre navnene på de variable også. Det ville ikke skade."

"Nå, alt dette kan gøres på blot et par sekunder ved hjælp af IntelliJ IDEA!"

"Du placerer markøren på navnet på metoden (eller klikker på det med musen), og trykker derefter på Shift+F6 og begynder simpelthen at skrive det ønskede metodenavn."

"Her er et eksempel på redigering af et metodenavn."

"Begynd at redigere:"

IDÉ: refactoring - 1

"Angiv et nyt navn:"

IDÉ: refactoring - 2

"Du skal blot indtaste et nyt navn, trykke på enter, og det er det. Denne metode vil blive omdøbt overalt, hvor den kaldes i projektet."

"IntelliJ IDEA plejer også at spørge, om du vil omdøbe variabelnavne og metodenavne i kommentarer. Bare klik på 'Ja', og det vil ændre alt."

"Hvis mere er, hvis projektet kompilerede før denne refactoring operation, så er det garanteret at kompilere efter refactoring."

"Lyder meget lovende."

"Du kan i øvrigt ændre variabelnavne på samme måde. Når du har klikket på et navn, skal du blot trykke på Shift+F6 — Du kan derefter indtaste et nyt navn, og IntelliJ vil ændre variabelnavnet, uanset hvor det bruges. "

"Hvis variablen er et felt i en klasse og har en getter og en setter, så vil navnene på getter og setter også blive ændret, så de matcher variablens nye navn."

"Jeg prøvede det ved at bruge variabler. Alt fungerer som du sagde, Ellie. Refaktorering er fantastisk!"

"Tror du, det er alt, hvad der er ved refactoring? Refractoring er så bredt et emne - vi har ikke engang ridset overfladen."

"Wow. Hvad er der ellers?"

Magisk trick #2: Udtræk en variabel.

"Nogle gange gentages visse udtryk så ofte i kode, at du vil flytte dem til en separat variabel. For eksempel:"

Kode
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());
}
Sådan vil du have det til at se ud:
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());
}

"Ah."

"Og kode kan være meget mere kompliceret, med mange gentagne dele."

"Programmører skriver det ikke på den måde med vilje. Men du bliver ofte nødt til at tilføje noget til en metode, så noget andet - og med tiden går antallet af gentagelser gennem taget."

"Ved at oprette en separat variabel kan vi give den et rigtigt navn og forbedre kodens læsbarhed."

"For eksempel, i eksemplet ovenfor, taler vi måske ikke om en hjemmeadresse. Måske taler vi om adressen på en nødkontakt. Så kan du kalde denne variabel nødkontaktadresse i stedet for blot adresse. Så en programmør at se denne kode for første gang vil forstå, hvad der foregår her."

"Ja, jeg er enig. Tilføjelse af sådanne variabler giver mening."

"Så hvordan gør du det?"

"At flytte et udtryk til en separat variabel er meget simpelt."

Trin 1: Brug musen til at vælge udtrykket.

IDÉ: refactoring - 3

Trin 2: Tryk på Ctrl+Alt+V

IDÉ: refactoring - 4

"Et vindue åbner, hvor IntelliJ IDEA spørger os, om vi kun vil erstatte det valgte udtryk eller alle forekomster af udtrykket (4 forekomster)?"

"Vælg den anden mulighed for at erstatte alle forekomster (Erstat alle 4 forekomster)"

Trin 3: Tryk på Enter.

IDÉ: refactoring - 5

"IntelliJ IDEA vil bede dig om at indtaste et variabelnavn. Det vil også komme med sit eget forslag til navnet. Ikke dårligt, vel?"

"Uh-huh. Lige på. Vi havde også planer om at navngive variablen 'adresse'. Hvordan vidste den det?"

"Ved at bruge navnet på den sidste metode i udtrykket, som returnerer en adresse. Det er således sandsynligt, at variablen vil blive brugt til at gemme en adresse."

"Det fungerede rigtig godt. Fantastiske ting, Ellie."

Magisk trick #3: Udpak kode i en separat metode.

"Men vi kunne have gjort noget andet. Vi kunne have erklæret en ny metode, f.eks. printAddress (), og flyttet al denne kode ind i den."

"Lad os prøve at gøre det."

Trin 1: Vælg de 4 linjer kode, der bruger adressevariablen:

IDÉ: refactoring - 6

Trin 2: Tryk på Ctrl+Alt+M

IDÉ: refactoring - 7

"IntelliJ IDEA bestemmer, hvilke variabler metoden skal bruge, og foreslår, hvordan den skal se ud. "Det eneste, der er tilbage, er at indtaste et navn til metoden."

Trin 3: Indtast printAddress som metodenavn, og tryk på Enter.

IDÉ: refactoring - 8

"Hvordan kan du lide det?"

"Det er fantastisk. Ikke kun udtrak IntelliJ IDEA koden til en separat metode, den tilføjede også alle de nødvendige variabler. Desuden gættede den alle navnene korrekt."