Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Refactoring-Wizard "Smart Add Parameter" (https://www.delphipraxis.net/174643-refactoring-wizard-smart-add-parameter.html)

PeterPanino 2. Mai 2013 20:42

Refactoring-Wizard "Smart Add Parameter"
 
Hallo! Gibt es einen Refactoring-Wizard für den Delphi Code-Editor, der folgendes macht:

Ich habe z.B. folgende Methode:
Delphi-Quellcode:
procedure TMyClass.HandleButton;
begin
  MyButton.Caption := 'Do it!';
  MyButton.Enabled := True;
  MyButton.DropDownMenu := MyPopupMenu;
end;
Nun setze ich den Cursor auf einen der Bezeichner "MyButton" und aktiviere den Refactoring-Wizard: Es erscheint ein Dialog, in dem ich einen Namen für den Parameter eingebe (AButton), sowie die Optionen "Modifier" und "Default" einstellen kann. Nach Klick auf OK hat der Refactoring-Wizard die Methode folgendermaßen modifiziert (und natürlich automatisch zugleich die entsprechende Deklaration im Interface-Teil):
Delphi-Quellcode:
procedure TMyClass.HandleButton(AButton: TButton);
begin
  AButton.Caption := 'Do it!';
  AButton.Enabled := True;
  AButton.DropDownMenu := MyPopupMenu;
end;
Danach setze ich den Cursor auf 'Do it!' und er macht daraus automatisch:
Delphi-Quellcode:
procedure TMyClass.HandleButton(AButton: TButton; ACaption: string);
begin
  AButton.Caption := ACaption;
  AButton.Enabled := True;
  AButton.DropDownMenu := MyPopupMenu;
end;
Usw. So ein Refactoring-Wizard wäre ungeheuer praktisch und zeitsparend! Denkbar wäre auch, dass der Refactoring-Dialog bereits alle in der Methode vorkommenden Symbole und Typen auflistet und man nur noch jeweils draufklicken muss, um diesen als Parameter einzufügen.

Bitte jetzt nicht die Antwort: "Du könntest die Methode ja gleich so generalisiert schreiben, wie du sie brauchst!". Der Grund ist nämlich der, dass man häufig eine spezielle (also nicht generalisierte) Prozedur/Methode als Ergebnis eines Extract-Method-Refactorings erhält. Sie dann zu generalisieren ist dann aber oft wieder entsprechend zeitaufwendig.

Furtbichler 2. Mai 2013 21:25

AW: Refactoring-Wizard "Smart Add Parameter"
 
Refactoring ändert Code, ohne die Semantik zu ändern. Hier würde aber aus dem Zugriff auf eine Instanz ('MyButton') plötzlich ein Parameter werden. Das wird so nicht gehen bzw. keinen Sinn ergeben.

Zudem hält Delphi eine sehr komfortable Möglichkeit bereit, 'MyButton' in 'AButton' zu ändern. Dann noch den Parameter hinzufügen und fertig. Einem Refactoring-Tool müsstest Du noch mitteilen, das es die Semantik ändern soll (also MyButton=>AButton). Und den Fall einbauen, das man mehr als einen Parameter hinzufügen will usw.

PeterPanino 2. Mai 2013 21:48

AW: Refactoring-Wizard "Smart Add Parameter"
 
Zitat:

Zitat von Furtbichler (Beitrag 1213897)
Das wird so nicht gehen bzw. keinen Sinn ergeben.

Natürlich ergibt das einen Sinn, weil die Methode dadurch zeitsparend generalisiert wird.

Zitat:

Zitat von Furtbichler (Beitrag 1213897)
Zudem hält Delphi eine sehr komfortable Möglichkeit bereit, 'MyButton' in 'AButton' zu ändern.

Meinst du den Sync-Bearbeitungsmodus? Der besteht aus mehreren Bedienungsschritten - zu umständlich.

Zitat:

Zitat von Furtbichler (Beitrag 1213897)
Dann noch den Parameter hinzufügen und fertig.

Das ist ja gerade das, was der Refactoring-Wizard mit einem Klick erledigen soll. Manuell brauchst du inklusive Implementation und Deklaration wesentlich länger. Selbst mit dem ModelMaker AddParameter-Wizard dauert es viel länger, weil man dort erst umständlich selbst den Typ des Parameters eingeben muss.

Zitat:

Zitat von Furtbichler (Beitrag 1213897)
Und den Fall einbauen, das man mehr als einen Parameter hinzufügen will usw.

Der Refactoring-Dialog könnte bereits automatisch eine Check-Liste aller in der Methode vorkommenden parameterisierbaren Bezeichner und Ausdrücke und ihre Typen enthalten, z.B.:

MyButton: TButton
'Do it!': string
True: Boolean
MyPopupMenu: TPopupMenu

Man müsste dann nur noch auf die Checkboxen klicken und hätte die Methode dann in einem Sekundenbruchteil refaktorisiert!

Furtbichler 2. Mai 2013 22:55

AW: Refactoring-Wizard "Smart Add Parameter"
 
Zitat:

Zitat von PeterPanino (Beitrag 1213903)
Das ist ja gerade das, was der Refactoring-Wizard mit einem Klick erledigen soll.

Na dann zähl mal die Klicks.

Also: Rechtsklick->Menü->Refactoring->Diese Instanz als Parameter einführen->Dialog-poppt-hoch
(nun den Parameternamen eintippen-> Position des neuen Parameters in der Parameterliste wählen->
??Und was passiert mit den bisherigen Aufrufen?? -> Enter.

Zitat:

Der Refactoring-Dialog könnte bereits automatisch eine Check-Liste aller in der Methode vorkommenden parameterisierbaren Bezeichner und Ausdrücke und ihre Typen enthalten, z.B.:
...
Man müsste dann nur noch auf die Checkboxen klicken und hätte die Methode dann in einem Sekundenbruchteil refaktorisiert!
Na, dann sind es ja doch wesentlich mehr als 'ein Klick'.

Also gut, Du willst also ein Tool, um die Funktionsweise eines Programms zu verändern. Klar. Für deinen speziellen Fall. Auch klar. Ich würde so ein Tool nie benötigen, weil ich vorher weiss, welche Parameter in etwa für die Methode benötigt werden-

Und generell ist das nicht zu gebrauchen, denn wer will das schon: Eine (aus Sicht der Methode) globale Variable (ja ja, kann auch ein Feld, Property etc sein) durch einen Parameter ersetzen. Für Rookies schreibt man keine Tools dieser Art, das lohnt sich nicht. Imho ist der Fall auch viel zu speziell.

Mein Tipp: Arbeite dich in OTA ein und schreib Dir so ein Teil. Du wirst sehen, wie 'praktisch' das ist. Und es wird die Frage beantworten, weshalb es soetwas nicht schon längst gibt.

PeterPanino 2. Mai 2013 23:27

AW: Refactoring-Wizard "Smart Add Parameter"
 
Zitat:

Zitat von Furtbichler (Beitrag 1213908)
Ich würde so ein Tool nie benötigen, weil ich vorher weiss, welche Parameter in etwa für die Methode benötigt werden

Hab ich ja geschrieben, dass man normalerweise bereits generalisierte Methoden schreibt. Ich habe aber auch geschrieben, dass man das für jene Fälle brauchen kann, wenn man etwa mittels "Methode extrahieren" eine spezielle (also nicht generalisierte) Methode erhalten hat.

Stell dir vor, du hast eine spezielle Methode. Dann ergibt es sich, dass du diese Methode doch in generalisierter Form benötigst (kommt immer wieder vor, auch bei sorgfältigster Planung; sag nicht, dass du das nie benötigt hast). In diesem Fall wäre ein solcher Smart Parameter Wizard sehr nützlich!

scrat1979 5. Mai 2013 16:28

AW: Refactoring-Wizard "Smart Add Parameter"
 
Vielleicht ist ModelMaker Code Explorer was du suchst. Trial verfügbar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz