"Buna din nou."

"Bună!"

„Astăzi am să vă spun despre refactorizare. Refactorizarea înseamnă schimbarea codului dintr-un proiect fără a-i schimba funcționalitatea.”

— Dar cum este posibil asta?

"Ei bine, în cele mai simple cazuri, am putea redenumi variabilele și/sau metodele. La urma urmei, schimbarea numelui unei variabile nu va face ca programul să funcționeze diferit, nu?"

"Desigur că nu."

De asemenea, puteți împărți metodele mari în mai multe metode mai mici.

„Puteți extrage fragmente de cod repetate într-o metodă separată.

„Unele funcții pot fi declarate statice și apoi mutate în clase de utilitate.”

„Dar aceasta este o interpretare restrânsă a refactorizării”.

„Refactorizarea înseamnă uneori rescrierea (îmbunătățirea) arhitecturii unui proiect fără a adăuga noi funcționalități. Aceasta este refactorizarea în sensul larg al termenului.”

„IntelliJ IDEA a devenit cel mai popular mediu de dezvoltare integrat (IDE), în special pentru că a fost primul care a introdus instrumente de refactorizare foarte puternice.”

"Ce sunt aceste instrumente magice?"

Truc magic #1: Schimbați numele unei metode.

„Imaginați-vă că codul dvs. are o metodă care este apelată din 100-500 de locuri diferite. Ați decis să-i schimbați numele în ceva mai ușor de înțeles. Să presupunem că este run() și doriți să fie rulatDownloadTaskAsync(). Cât de repede poti sa faci asta?"

„Ei bine, mai întâi trebuie să schimbați numele metodei, apoi să găsiți toate locurile din program în care acea metodă este numită și să schimbați și numele acolo.”

— Și cum ai găsi acele locuri?

„Aș rula programul și IntelliJ IDEA mi-ar arăta toate locurile în care este numită o metodă inexistentă”.

„Bine. Dar acum să presupunem că fiecare metodă are un comentariu explicativ (JavaDoc) care explică ce face metoda – iar numele vechii metode este scris acolo.”

— Și eu aș schimba comentariile.

„Dar pot exista și variabile ale căror nume sunt asociate cu numele metodei. Ar fi bine să le schimbați și pe acestea:”

Inainte de După
Task task = manager.run();
Task asyncTask = manager.runDownloadTaskAsync();

"Da, ar fi bine să schimbăm și numele acelor variabile. N-ar strica."

„Ei bine, toate acestea se pot face în doar câteva secunde folosind IntelliJ IDEA!”

„Puneți cursorul pe numele metodei (sau faceți clic pe el cu mouse-ul), apoi apăsați Shift+F6 și pur și simplu începeți să tastați numele metodei dorite.”

„Iată un exemplu de editare a numelui unei metode.”

„Începe editarea:”

IDEE: refactorizare - 1

„Specificați un nume nou:”

IDEE: refactorizare - 2

„Pur și simplu introduceți un nume nou, apăsați enter și gata. Această metodă va fi redenumită oriunde este numită în proiect.”

„IntelliJ IDEA vă întreabă de obicei dacă doriți să redenumiți numele variabilelor și numele metodelor în comentarii. Doar faceți clic pe „Da” și va schimba totul.”

„Mai mult, dacă proiectul a fost compilat înainte de această operație de refactorizare, atunci este garantat să se compila după refactorizare.”

— Sună foarte promițător.

„Apropo, puteți schimba numele variabilelor în același mod. După ce faceți clic pe un nume, apăsați pur și simplu Shift+F6 — Apoi puteți introduce un nume nou, iar IntelliJ va schimba numele variabilei oriunde este folosită.

„Dacă variabila este un câmp dintr-o clasă și are un getter și un setter, atunci numele getterului și setterului vor fi, de asemenea, modificate pentru a se potrivi cu noul nume al variabilei.”

"Am încercat folosind variabile. Totul funcționează exact așa cum ai spus, Ellie. Refactorizarea este minunată!"

"Credeți că asta este tot ceea ce înseamnă refactorizarea? Refractorarea este un subiect atât de larg - nici măcar nu am zgâriat suprafața."

"Uau. Ce altceva mai este?"

Truc magic #2: extrage o variabilă.

„Uneori anumite expresii sunt repetate atât de des în cod încât veți dori să le mutați într-o variabilă separată. De exemplu:”

Cod
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());
}
Cum vrei să arate:
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."

„Și codul poate fi mult mai complicat, cu multe părți repetate.”

„Programatorii nu scriu așa în mod intenționat. Dar de multe ori va trebui să adăugați ceva la o metodă, apoi altceva – și în timp numărul de repetări trece prin acoperiș.”

„Prin crearea unei variabile separate, îi putem da un nume propriu și putem îmbunătăți lizibilitatea codului.”

„De exemplu, în exemplul de mai sus, poate că nu vorbim despre o adresă de acasă. Poate că vorbim despre adresa unui contact de urgență. Atunci ai putea apela această variabilă emergencyContactAddress, în loc de doar adresă. Apoi, un programator Dacă vedeți acest cod pentru prima dată, veți înțelege ce se întâmplă aici.”

"Da, sunt de acord. Adăugarea unor astfel de variabile are sens."

— Deci, cum o faci?

„Mutarea unei expresii într-o variabilă separată este foarte simplă.”

Pasul 1: Folosiți mouse-ul pentru a selecta expresia.

IDEE: refactorizare - 3

Pasul 2: apăsați Ctrl+Alt+V

IDEE: refactorizare - 4

„Se deschide o fereastră în care IntelliJ IDEA ne întreabă dacă vrem să înlocuim doar expresia selectată sau toate instanțele expresiei (4 apariții)?”

„Selectați a doua opțiune pentru a înlocui toate aparițiile (Înlocuiți toate cele 4 apariții)”

Pasul 3: Apăsați Enter.

IDEE: refactorizare - 5

„IntelliJ IDEA vă va cere să introduceți un nume de variabilă. De asemenea, își va face propria sugestie pentru nume. Nu-i rău, nu?”

"Uh-huh. Chiar mai departe. De asemenea, plănuiam să numim variabilei „adresă”. De unde a știut?"

"Prin folosirea numelui ultimei metode din expresie, care returnează o adresă. Astfel, este probabil ca variabila să fie folosită pentru a stoca o adresă."

— A mers foarte bine. Lucruri grozave, Ellie.

Truc magic #3: Extrage codul într-o metodă separată.

„Dar am fi putut face altceva. Am fi putut declara o nouă metodă, de exemplu printAddress (), și am fi mutat tot acest cod în ea.”

— Să încercăm să facem asta.

Pasul 1: Selectați cele 4 linii de cod care folosesc variabila adresa:

IDEE: refactorizare - 6

Pasul 2: apăsați Ctrl+Alt+M

IDEE: refactorizare - 7

„IntelliJ IDEA determină ce variabile va avea nevoie metoda și sugerează cum ar trebui să arate. „Singurul lucru rămas este să introduceți un nume pentru metodă.”

Pasul 3: Introduceți printAddress ca nume de metodă și apăsați Enter.

IDEE: refactorizare - 8

— Cum îți place asta?

"Este minunat. Nu numai că IntelliJ IDEA a extras codul într-o metodă separată, ci și-a adăugat toate variabilele necesare. Mai mult, a ghicit toate numele corect."