AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Refactorings in Delphi?

Ein Thema von PeterPanino · begonnen am 31. Dez 2012 · letzter Beitrag vom 1. Jan 2013
 
PeterPanino

Registriert seit: 4. Sep 2004
1.472 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Refactorings in Delphi?

  Alt 31. Dez 2012, 23:44
Ausgehend von folgendem Code wurde testweise die Code-Auswahl c := a + b mit Delphis Refactoring-Methode bearbeitet:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  a, b, c: Integer;
begin
  a := 2;
  b := 3;
  c := a + b;
end;
Das in Delphi XE2 eingebaute "Methode extrahieren" macht daraus:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  a, b: Integer;
begin
  a := 2;
  b := 3;
  ExtractedMethod(a, b);
end;

procedure TForm1.ExtractedMethod(a: Integer; b: Integer);
var
  c: Integer;
begin
  c := a + b;
end;
D.h. es wird einfach und simpel die Anweisung c := a + b in eine Prozedur ausgelagert. Eine Parameter-Bearbeitung ist im Refactoring-Dialog nicht möglich. Die Rückgabe eines Ergebnisses ist nicht vorgesehen, da der Code selbst eine solche ja nicht benötigt. Streng nach Compiler-Logik eben.

Die erzeugte Prozedur sieht jedoch anders aus, wenn die Variable c NACH der Codeauswahl c := a + b noch verwendet wird:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  a, b, c, d: Integer;
begin
  a := 2;
  b := 3;
  c := a + b;
  d := a + b + c;
end;
In diesem Fall erzeugt das Delphi-Refactoring diesen Code:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  a, b, c, d: Integer;
begin
  a := 2;
  b := 3;
  ExtractedMethod(a, b, c);
  d := a + b + c;
end;

procedure TForm1.ExtractedMethod(a: Integer; b: Integer; var c: Integer);
begin
  c := a + b;
end;
Mit dem var-Parameter berücksichtigt das Delphi-Refactoring intelligenterweise, dass die Variable c später noch verwendet wird.

(ModelMaker Code Explorer setzt hier unnötigerweise 3 var-Parameter, obwohl an die Variablen a und b innerhalb der Prozedur ja gar nichts zugewiesen wird):
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  a, b, c, d: Integer;
begin
  a := 2;
  b := 3;
  (*TODO: extracted code
  c := a + b;
  *)

  NewMethod(a, b, c);
  d := a + b + c;
end;

procedure TForm1.NewMethod(var a, b, c: Integer);
begin
  c := a + b;
end;
Das bedeutet also: Wenn man die Rückgabe eines Ergebnisses benötigt, kann man dies mit einem einfachen Trick erreichen. Man verwendet einfach die gewünschte Rückgabe-Variable in einer Dummy-Anweisung NACH der Code-Auswahl:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  a, b, c: Integer;
begin
  a := 2;
  b := 3;
  c := a + b;
  c := c; // Dummy-Anweisung
end;
Das Delphi-Refactoring macht daraus:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  a, b, c: Integer;
begin
  a := 2;
  b := 3;
  ExtractedMethod(a, c, b);
  c := c; // Dummy-Anweisung
end;

procedure TForm1.ExtractedMethod(a: Integer; var c: Integer; b: Integer);
begin
  c := a + b;
end;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz