"Hallo igjen."

"Hei!"

"I dag skal jeg fortelle deg om refactoring. Refactoring er å endre koden i et prosjekt uten å endre funksjonaliteten."

"Men hvordan er det mulig?"

"Vel, i de enkleste tilfellene kan vi gi nytt navn til variabler og/eller metoder. Tross alt vil det å endre navnet på en variabel ikke få programmet til å fungere annerledes, gjør det vel?"

"Selvfølgelig ikke."

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

"Du kan trekke gjentatte kodebiter inn i en egen metode. "

"Noen funksjoner kan erklæres statiske og deretter flyttes til verktøyklasser."

"Men dette er en snever tolkning av refactoring."

"Refaktorering betyr noen ganger å omskrive (forbedre) et prosjekts arkitektur uten å legge til ny funksjonalitet. Dette er refaktorering i den brede forstanden av begrepet."

"IntelliJ IDEA ble det mest populære integrerte utviklingsmiljøet (IDE), spesielt fordi det var det første som introduserte veldig kraftige refactoring-verktøy."

"Hva er disse magiske verktøyene?"

Magisk triks nr. 1: Endre navnet på en metode.

"Se for deg at koden din har en metode som kalles fra 100-500 forskjellige steder. Du har bestemt deg for å endre navnet til noe mer forståelig. La oss si at den kjøres(), og du vil at den skal kjøreDownloadTaskAsync(). Hvor raskt kan du gjøre det?"

"Vel, først må du endre metodens navn, deretter finne alle stedene i programmet der metoden kalles, og endre navnet der også."

"Og hvordan ville du finne disse stedene?"

"Jeg ville bare kjørt programmet og IntelliJ IDEA ville vise meg alle stedene der en ikke-eksisterende metode kalles."

"Ok. Men anta nå at hver metode har en forklarende kommentar (JavaDoc) som forklarer hva metoden gjør - og det gamle metodenavnet er skrevet der."

"Jeg ville endret kommentarene også."

"Men det kan også være variabler hvis navn er knyttet til metodenavnet. Det ville være greit å endre disse også:"

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

"Ja, det ville være bra å endre navnene på disse variablene også. Det ville ikke skade."

"Vel, alt dette kan gjøres på bare noen få sekunder ved å bruke IntelliJ IDEA!"

"Du plasserer markøren på navnet på metoden (eller klikker på det med musen), og trykker deretter Shift+F6 og begynner ganske enkelt å skrive inn ønsket metodenavn."

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

"Begynn å redigere:"

IDÉ: refaktorisering - 1

"Spesifiser et nytt navn:"

IDÉ: refaktorisering - 2

"Bare skriv inn et nytt navn, trykk enter, og det er det. Denne metoden vil bli omdøpt overalt hvor den kalles i prosjektet."

"IntelliJ IDEA spør vanligvis også om du vil endre navn på variabelnavn og metodenavn i kommentarer. Bare klikk "Ja", så endres alt."

"I tillegg, hvis prosjektet ble kompilert før denne refaktoreringsoperasjonen, så er det garantert å kompilere etter refaktoriseringen."

– Høres veldig lovende ut.

"Forresten, du kan endre variabelnavn på samme måte. Etter å ha klikket på et navn, trykk ganske enkelt Shift+F6 — Du kan deretter skrive inn et nytt navn, og IntelliJ vil endre variabelnavnet uansett hvor det brukes. "

"Hvis variabelen er et felt i en klasse og har en getter og en setter, vil navnene på getter og setter også bli endret for å matche variabelens nye navn."

"Jeg prøvde det med variabler. Alt fungerer akkurat som du sa, Ellie. Refaktorering er kjempebra!"

"Tror du det er alt som er til refactoring? Refractoring er et så vidt emne - vi har ikke engang skrapet på overflaten."

"Wow. Hva mer er det?"

Magisk triks #2: Trekk ut en variabel.

"Noen ganger gjentas visse uttrykk 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());
}
Slik vil du at det skal se ut:
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 mye mer komplisert, med mange gjentatte deler."

"Programmører skriver det ikke på den måten med vilje. Men du må ofte legge til noe til en metode, så noe annet - og over tid går antallet repetisjoner gjennom taket."

"Ved å lage en egen variabel kan vi gi den et riktig navn og forbedre lesbarheten til koden."

"For eksempel, i eksemplet ovenfor, snakker vi kanskje ikke om en hjemmeadresse. Kanskje vi snakker om adressen til en nødkontakt. Da kan du ringe denne variabelen emergencyContactAddress, i stedet for bare adresse. Deretter en programmerer Å se denne koden for første gang vil forstå hva som skjer her."

"Ja, jeg er enig. Å legge til slike variabler er fornuftig."

"Så, hvordan gjør du det?"

"Å flytte et uttrykk til en separat variabel er veldig enkelt."

Trinn 1: Bruk musen til å velge uttrykket.

IDÉ: refaktorisering - 3

Trinn 2: Trykk Ctrl+Alt+V

IDÉ: refaktorisering - 4

"Et vindu åpnes der IntelliJ IDEA spør oss om vi ønsker å erstatte bare det valgte uttrykket eller alle forekomster av uttrykket (4 forekomster)?"

"Velg det andre alternativet for å erstatte alle forekomster (Erstatt alle 4 forekomster)"

Trinn 3: Trykk Enter.

IDÉ: refaktorering - 5

"IntelliJ IDEA vil be deg om å skrive inn et variabelnavn. Den vil også lage et eget forslag til navnet. Ikke verst, hva?"

"Uh-he. Rett på. Vi planla også å gi variabelen "adresse". Hvordan visste den det?"

"Ved å bruke navnet på den siste metoden i uttrykket, som returnerer en adresse. Dermed er det sannsynlig at variabelen vil bli brukt til å lagre en adresse."

"Det fungerte veldig bra. Flotte greier, Ellie."

Magisk triks #3: Pakk ut kode i en egen metode.

"Men vi kunne ha gjort noe annet. Vi kunne ha erklært en ny metode, f.eks printAddress (), og flyttet all denne koden inn i den."

"La oss prøve å gjøre det."

Trinn 1: Velg de 4 kodelinjene som bruker adressevariabelen:

IDÉ: refaktorisering - 6

Trinn 2: trykk Ctrl+Alt+M

IDÉ: refactoring - 7

"IntelliJ IDEA bestemmer hvilke variabler metoden vil trenge, og foreslår hvordan den skal se ut. "Det eneste som gjenstår er å skrive inn et navn på metoden."

Trinn 3: Skriv inn printAddress som metodenavn og trykk Enter.

IDÉ: refaktorisering - 8

"Hvordan liker du det?"

"Det er kjempebra. Ikke bare trakk IntelliJ IDEA ut koden til en egen metode, den la også til alle nødvendige variabler. Dessuten gjettet den alle navnene riktig."