"Hallo wieder."

"Hallo!"

„Heute werde ich Ihnen etwas über Refactoring erzählen. Refactoring bedeutet, den Code in einem Projekt zu ändern, ohne seine Funktionalität zu ändern.“

„Aber wie ist das möglich?“

„Na ja, im einfachsten Fall könnten wir Variablen und/oder Methoden umbenennen. Wenn man den Namen einer Variablen ändert, führt das doch nicht dazu, dass das Programm anders funktioniert, oder?“

"Natürlich nicht."

„Sie können große Methoden auch in mehrere kleinere aufteilen.

„Sie können wiederholte Codefragmente in eine separate Methode ziehen.

„Einige Funktionen können als statisch deklariert und dann in Dienstprogrammklassen verschoben werden.“

„Aber das ist eine enge Interpretation von Refactoring.“

„Refactoring bedeutet manchmal, die Architektur eines Projekts neu zu schreiben (zu verbessern), ohne neue Funktionalität hinzuzufügen. Das ist Refactoring im weitesten Sinne des Wortes.“

„IntelliJ IDEA wurde zur beliebtesten integrierten Entwicklungsumgebung (IDE), insbesondere weil es als erstes Unternehmen sehr leistungsstarke Refactoring-Tools einführte.“

„Was sind das für magische Werkzeuge?“

Zaubertrick Nr. 1: Ändern Sie den Namen einer Methode.

„Stellen Sie sich vor, Ihr Code verfügt über eine Methode, die von 100 bis 500 verschiedenen Stellen aufgerufen wird. Sie haben beschlossen, ihren Namen in einen verständlicheren Namen zu ändern. Nehmen wir an, es heißt run() und Sie möchten, dass es runDownloadTaskAsync() heißt. Wie schnell können Sie das tun?"

„Nun, zuerst müssen Sie den Namen der Methode ändern, dann alle Stellen im Programm finden, an denen diese Methode aufgerufen wird, und dort auch den Namen ändern.“

„Und wie würden Sie diese Orte finden?“

„Ich habe einfach das Programm ausgeführt und IntelliJ IDEA zeigte mir alle Stellen, an denen eine nicht vorhandene Methode aufgerufen wird.“

„Okay. Aber nehmen wir nun an, dass jede Methode einen erläuternden Kommentar (JavaDoc) hat, der erklärt, was die Methode tut – und der alte Methodenname steht dort.“

„Ich würde auch die Kommentare ändern.“

„Es kann aber auch Variablen geben, deren Namen mit dem Namen der Methode verknüpft sind. Es wäre gut, diese auch zu ändern:“

Vor Nach
Task task = manager.run();
Task asyncTask = manager.runDownloadTaskAsync();

„Ja, es wäre gut, auch die Namen dieser Variablen zu ändern. Es würde nicht schaden.“

„Nun, das alles lässt sich mit IntelliJ IDEA in nur wenigen Sekunden erledigen!“

„Sie platzieren den Cursor auf dem Namen der Methode (oder klicken mit der Maus darauf), drücken dann Umschalt+F6 und beginnen einfach mit der Eingabe des gewünschten Methodennamens.“

„Hier ist ein Beispiel für die Bearbeitung eines Methodennamens.“

"Beginnen Sie die Bearbeitung:"

IDEE: Refactoring - 1

„Geben Sie einen neuen Namen an:“

IDEE: Refactoring - 2

„Geben Sie einfach einen neuen Namen ein, drücken Sie die Eingabetaste, und fertig. Diese Methode wird überall dort umbenannt, wo sie im Projekt aufgerufen wird.“

„IntelliJ IDEA fragt normalerweise auch, ob Sie Variablennamen und Methodennamen in Kommentaren umbenennen möchten. Klicken Sie einfach auf „Ja“ und es wird sich alles ändern.“

„Darüber hinaus gilt: Wenn das Projekt vor diesem Refactoring-Vorgang kompiliert wurde, wird es garantiert auch nach dem Refactoring kompiliert.“

„Klingt sehr vielversprechend.“

„Übrigens können Sie Variablennamen auf die gleiche Weise ändern. Nachdem Sie auf einen Namen geklickt haben, drücken Sie einfach Umschalt+F6 – Sie können dann einen neuen Namen eingeben und IntelliJ ändert den Variablennamen überall dort, wo er verwendet wird.

„Wenn die Variable ein Feld in einer Klasse ist und einen Getter und einen Setter hat, werden auch die Namen des Getters und Setters geändert, um sie an den neuen Namen der Variablen anzupassen.“

„Ich habe es mit Variablen versucht. Alles funktioniert genau so, wie du gesagt hast, Ellie. Refactoring ist großartig!“

„Glauben Sie, dass das alles ist, was Refactoring ausmacht? Refractoring ist ein so weitreichendes Thema – wir haben noch nicht einmal an der Oberfläche gekratzt.“

„Wow. Was gibt es sonst noch?“

Zaubertrick Nr. 2: Extrahieren Sie eine Variable.

„Manchmal werden bestimmte Ausdrücke im Code so oft wiederholt, dass Sie sie in eine separate Variable verschieben möchten. Zum Beispiel:“

Code
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());
}
So soll es aussehen:
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."

„Und Code kann viel komplizierter sein und viele sich wiederholende Teile enthalten.“

„Programmierer schreiben es nicht absichtlich so. Aber oft muss man einer Methode etwas hinzufügen, dann etwas anderes – und mit der Zeit geht die Anzahl der Wiederholungen in die Höhe.“

„Indem wir eine separate Variable erstellen, können wir ihr einen passenden Namen geben und die Lesbarkeit des Codes verbessern.“

„Zum Beispiel sprechen wir im obigen Beispiel möglicherweise nicht über eine Privatadresse. Vielleicht sprechen wir über die Adresse eines Notfallkontakts. Dann könnten Sie diese Variable EmergencyContactAddress nennen, anstatt nur Adresse. Dann ein Programmierer Wer diesen Code zum ersten Mal sieht, wird verstehen, was hier vor sich geht.“

„Ja, ich stimme zu. Das Hinzufügen solcher Variablen macht Sinn.“

„Also, wie macht man das?“

„Das Verschieben eines Ausdrucks in eine separate Variable ist sehr einfach.“

Schritt 1: Wählen Sie den Ausdruck mit der Maus aus.

IDEE: Refactoring - 3

Schritt 2: Drücken Sie Strg+Alt+V

IDEE: Refactoring – 4

„Es öffnet sich ein Fenster, in dem IntelliJ IDEA uns fragt, ob wir nur den ausgewählten Ausdruck oder alle Instanzen des Ausdrucks (4 Vorkommen) ersetzen möchten?“

„Wählen Sie die zweite Option, um alle Vorkommen zu ersetzen (Alle 4 Vorkommen ersetzen)“

Schritt 3: Drücken Sie die Eingabetaste.

IDEE: Refactoring – 5

„IntelliJ IDEA fordert Sie auf, einen Variablennamen einzugeben. Außerdem wird ein eigener Vorschlag für den Namen gemacht. Nicht schlecht, oder?“

„Uh-huh. Genau richtig. Wir hatten auch vor, die Variable ‚Adresse‘ zu benennen. Woher wusste sie das?“

„Durch Verwendung des Namens der letzten Methode im Ausdruck, die eine Adresse zurückgibt. Daher ist es wahrscheinlich, dass die Variable zum Speichern einer Adresse verwendet wird.“

„Das hat wirklich gut geklappt. Tolle Sache, Ellie.“

Zaubertrick Nr. 3: Code in eine separate Methode extrahieren.

„Aber wir hätten etwas anderes tun können. Wir hätten eine neue Methode deklarieren können, z. B. printAddress (), und den gesamten Code hinein verschieben können.“

„Lass uns das versuchen.“

Schritt 1: Wählen Sie die 4 Codezeilen aus, die die Adressvariable verwenden:

IDEE: Refactoring – 6

Schritt 2: Drücken Sie Strg+Alt+M

IDEE: Refactoring – 7

„IntelliJ IDEA ermittelt, welche Variablen die Methode benötigt, und schlägt vor, wie sie aussehen soll. „Es bleibt nur noch die Eingabe eines Namens für die Methode.“

Schritt 3: Geben Sie printAddress als Methodennamen ein und drücken Sie die Eingabetaste.

IDEE: Refactoring – 8

"Wie gefällt dir das?"

„Es ist großartig. IntelliJ IDEA hat nicht nur den Code in eine separate Methode extrahiert, sondern auch alle erforderlichen Variablen hinzugefügt. Darüber hinaus wurden alle Namen richtig erraten.“