"Ciao di nuovo."

"CIAO!"

"Oggi vi parlerò del refactoring. Il refactoring sta cambiando il codice in un progetto senza cambiarne la funzionalità."

"Ma come è possibile?"

"Beh, nei casi più semplici, potremmo rinominare variabili e/o metodi. Dopotutto, cambiare il nome di una variabile non farà funzionare il programma in modo diverso, vero?"

"Ovviamente no."

" Puoi anche suddividere i metodi di grandi dimensioni in diversi metodi più piccoli. "

"Puoi estrarre frammenti di codice ripetuti in un metodo separato. "

"Alcune funzioni possono essere dichiarate statiche e quindi spostate in classi di utilità."

"Ma questa è un'interpretazione ristretta del refactoring."

"Refactoring a volte significa riscrivere (migliorare) l'architettura di un progetto senza aggiungere nuove funzionalità. Questo è refactoring nel senso ampio del termine."

"IntelliJ IDEA è diventato l'ambiente di sviluppo integrato (IDE) più popolare proprio perché è stato il primo a introdurre strumenti di refactoring molto potenti."

"Cosa sono questi strumenti magici?"

Trucco magico n. 1: cambia il nome di un metodo.

"Immagina che il tuo codice abbia un metodo chiamato da 100-500 posizioni diverse. Hai deciso di cambiarne il nome in qualcosa di più comprensibile. Diciamo che è run() e vuoi che sia runDownloadTaskAsync(). Quanto velocemente puoi farlo?"

"Beh, prima devi cambiare il nome del metodo, poi trovare tutti i posti nel programma in cui quel metodo è chiamato, e cambiare anche lì il nome."

"E come troveresti quei posti?"

"Avrei semplicemente eseguito il programma e IntelliJ IDEA mi avrebbe mostrato tutti i punti in cui viene chiamato un metodo inesistente."

"Va bene. Ma ora supponiamo che ogni metodo abbia un commento esplicativo (JavaDoc) che spieghi cosa fa il metodo - e il vecchio nome del metodo è scritto lì."

"Cambierei anche i commenti."

"Ma potrebbero esserci anche variabili i cui nomi sono associati al nome del metodo. Sarebbe bene cambiare anche quelli:"

Prima Dopo
Task task = manager.run();
Task asyncTask = manager.runDownloadTaskAsync();

"Sì, sarebbe bene cambiare anche i nomi di quelle variabili. Non sarebbe male."

"Beh, tutto questo può essere fatto in pochi secondi usando IntelliJ IDEA!"

"Posiziona il cursore sul nome del metodo (o fai clic su di esso con il mouse), quindi premi Maiusc + F6 e inizia semplicemente a digitare il nome del metodo desiderato."

"Ecco un esempio di modifica del nome di un metodo."

"Inizia a modificare:"

IDEA: refactoring - 1

"Specifica un nuovo nome:"

IDEA: refactoring - 2

"Basta inserire un nuovo nome, premere invio e il gioco è fatto. Questo metodo verrà rinominato ovunque venga chiamato nel progetto."

"IntelliJ IDEA di solito chiede anche se si desidera rinominare i nomi delle variabili e dei metodi nei commenti. Basta fare clic su "Sì" e cambierà tutto."

"Inoltre, se il progetto è stato compilato prima di questa operazione di refactoring, è garantito che verrà compilato dopo il refactoring."

"Sembra molto promettente."

"A proposito, puoi cambiare i nomi delle variabili allo stesso modo. Dopo aver fatto clic su un nome, premi semplicemente Maiusc+F6 : puoi quindi inserire un nuovo nome e IntelliJ cambierà il nome della variabile ovunque venga utilizzato. "

"Se la variabile è un campo in una classe e ha un getter e un setter, anche i nomi del getter e del setter verranno modificati in modo che corrispondano al nuovo nome della variabile."

"Ho provato usando le variabili. Tutto funziona proprio come hai detto, Ellie. Il refactoring è fantastico!"

"Pensi che sia tutto ciò che c'è da fare per il refactoring? Il refractoring è un argomento così ampio: non abbiamo nemmeno scalfito la superficie."

"Wow. Cos'altro c'è?"

Trucco magico n. 2: estrarre una variabile.

"A volte certe espressioni vengono ripetute così spesso nel codice che vorrai spostarle in una variabile separata. Ad esempio:"

Codice
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());
}
Come vuoi che appaia:
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."

"E il codice può essere molto più complicato, con molte parti ripetute."

"I programmatori non lo scrivono intenzionalmente in questo modo. Ma spesso dovrai aggiungere qualcosa a un metodo, poi qualcos'altro - e nel tempo il numero di ripetizioni sale alle stelle."

"Creando una variabile separata, possiamo darle un nome appropriato e migliorare la leggibilità del codice."

"Ad esempio, nell'esempio sopra, forse non stiamo parlando di un indirizzo di casa. Forse stiamo parlando dell'indirizzo di un contatto di emergenza. Quindi potresti chiamare questa variabile EmergencyContactAddress, invece di solo indirizzo. Quindi, un programmatore vedere questo codice per la prima volta capirà cosa sta succedendo qui."

"Sì, sono d'accordo. L'aggiunta di tali variabili ha senso."

"Allora, come si fa?"

"Spostare un'espressione in una variabile separata è molto semplice."

Passaggio 1: utilizzare il mouse per selezionare l'espressione.

IDEA: refactoring - 3

Passaggio 2: premere Ctrl+Alt+V

IDEA: refactoring - 4

"Si apre una finestra in cui IntelliJ IDEA ci chiede se vogliamo sostituire solo l'espressione selezionata o tutte le istanze dell'espressione (4 occorrenze)?"

"Seleziona la seconda opzione per sostituire tutte le occorrenze (Sostituisci tutte e 4 le occorrenze)"

Passaggio 3: premere Invio.

IDEA: refactoring - 5

"IntelliJ IDEA ti chiederà di inserire un nome di variabile. Suggerirà anche il nome di una variabile. Non male, eh?"

"Uh-huh. Proprio così. Stavamo anche progettando di nominare la variabile 'indirizzo'. Come faceva a saperlo?"

"Utilizzando il nome dell'ultimo metodo nell'espressione, che restituisce un indirizzo. Pertanto, è probabile che la variabile venga utilizzata per memorizzare un indirizzo."

"Ha funzionato davvero bene. Grandi cose, Ellie."

Trucco magico n. 3: estrarre il codice in un metodo separato.

"Ma avremmo potuto fare qualcos'altro. Avremmo potuto dichiarare un nuovo metodo, ad esempio printAddress (), e spostare tutto questo codice al suo interno."

"Proviamo a farlo."

Passaggio 1: selezionare le 4 righe di codice che utilizzano la variabile indirizzo:

IDEA: refactoring - 6

Passaggio 2: premi Ctrl+Alt+M

IDEA: refactoring - 7

"IntelliJ IDEA determina di quali variabili avrà bisogno il metodo e suggerisce come dovrebbe essere. "L'unica cosa rimasta è inserire un nome per il metodo."

Passaggio 3: immettere printAddress come nome del metodo e premere Invio.

IDEA: refactoring - 8

"Come ti piace?"

"È fantastico. IntelliJ IDEA non solo ha estratto il codice in un metodo separato, ma ha anche aggiunto tutte le variabili richieste. Inoltre, ha indovinato correttamente tutti i nomi."