Entwickler-Ecke
Sonstiges (Delphi) - Refractoring -> Methode extrahieren
bole - Sa 09.10.10 01:31
Titel: Refractoring -> Methode extrahieren
Hallo
Ich habe in thread über Schleifenabbruch
http://www.delphi-forum.de/viewtopic.php?t=101855&start=0&postorder=asc
den Tipp über Refractoring -> Methode extrahieren von
jaenicke gelesen. Dies kannte ich bisher noch nicht, deshalb wollte ich es mal probieren...
Doch entweder bin ich zu blöd dies richtig zu machen oder ich habe den Zweck dieser Funktion nicht richtig verstanden. :gruebel:
Delphi extrahiert mir nur ein Code-Gerüst ohne Inhalt!
Wenn ich zum Beispiel aus diesen Code den markierten Teil mit 'methode extrahieren' in eine Procedure machen möchte kommt nur der folgende Code heraus:
Original Code Fragment
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| while (rest > 0) and (MarktPosIX >= i) do begin; If Marktpos[i].Quali=q then begin; If Marktpos[i].Anz >= Rest then Begin Quali[q].preis:=Quali[q].preis+rest*MarktPos[i].Preis; Rest:= 0; memo1.lines.Add('ok '+inttostr(q)+floattostr(Quali[q].preis)+' '+inttostr(rest)); End else begin; Quali[q].preis:=Quali[q].preis+MarktPos[i].anz*MarktPos[i].Preis; Rest:=Rest-Marktpos[i].Anz; memo1.lines.Add('nok '+inttostr(q)+floattostr(Quali[q].preis)+' '+inttostr(rest)); end; end; inc(i); end; If rest > 0 then begin; |
Extracted Method:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm2.ExtractedMethod; begin begin end; end; |
Der Inhalt der Procedure ist gelöscht!
Mache ich da was falsch? So sehe ich nicht wirklich einen Sinn hinter dieser Funktion...
Vielen Dank für Eure Erklärungen
Gruss
Bole
jaenicke - Sa 09.10.10 08:42
Steht es denn in der Vorschau richtig da?
Welche Delphiversion ist das?
Ich habe aber auch schon gemerkt, dass es in seltenen Fällen mal nicht richtig klappt.
bole - Sa 09.10.10 14:04
Hallo
Schon in der Vorschau ist nur das Code Gerüst.
Ich verwende Turbo Delphi 2006.
Gruss
Bole
jaenicke - Sa 09.10.10 14:20
Hinter dem begin vor dem Bereich ist ein Semikolon, ich vermute daran liegt es.
bole - Sa 09.10.10 15:28
Vielen Dank für den Tipp. Es scheint wirklich an diesem Semikolon gelegen zu haben... ohne funktioniert es tiptop.
Ich schliesse eigentlich jeden Befehl ausser vor Else aus Gewohnheit mit einem Semikolon ab. Ich denke so habe ich es Gelernt vor X Jahren mit Turbo Pascal....
Es war mir nicht klar das es dadurch zu Problemen kommen kann!
Gruss
Bole
delphi10 - So 10.10.10 00:25
bole hat folgendes geschrieben : |
Vielen Dank für den Tipp. Es scheint wirklich an diesem Semikolon gelegen zu haben... ohne funktioniert es tiptop.
Ich schliesse eigentlich jeden Befehl ausser vor Else aus Gewohnheit mit einem Semikolon ab. Ich denke so habe ich es Gelernt vor X Jahren mit Turbo Pascal....
|
Auch vor x-Jahren hat es in Turbo-Pascal kein Semikolon hinter
begin gegeben respektive hat die Syntax das nicht verlangt.
bole - So 10.10.10 12:38
Es mag sein das in der Syntax nicht wirklich ein Semikolon nach dem Begin verlangt wurde.
Wahrscheinlich hat es sich mein Lehrer auch ziehmlich einfach gemacht in dem er einfach die Regel aufstellte dass jeder Befehl ausser vor Else mit einem Semikolon abzuschliessen ist...
Bisher hatte ich deswegen auch noch nie bewusst Probleme.
Gruss
Bole
Tankard - So 10.10.10 14:07
Richtiges Pascal verlangt nicht wirkliche immer ein ;
zb.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| program test; begin if ausdruck then begin anweisung1; anweisung2 end else anweisung3 end. |
wobei delphi bei diesen sachen ne fehler meldet.
Martok - So 10.10.10 14:31
Und wie mir
BenBE erklärte (was ich auch nicht wusste):
| GeSHi-IRC hat folgendes geschrieben: |
<BenBE> The ; directly after begin is valid: You can have empty statements.
<BenBE> ;;; is valid Pascal. |
Deswegen dürfte wohl das
Begin; funktioniert haben. Aber wenn ich einen Parser bauen müsste, würde ich wohl auch nicht dran denken... und bei D2k6 war das Refactoring sowieso noch etwas holprig. Würde mich mal interessieren, ob aktuelle Versionen da immer noch drüber stolpern.
bole hat folgendes geschrieben : |
| Wahrscheinlich hat es sich mein Lehrer auch ziehmlich einfach gemacht in dem er einfach die Regel aufstellte dass jeder Befehl ausser vor Else mit einem Semikolon abzuschliessen ist... |
Das wäre ja noch i.O. - Aber:
begin ist kein Befehl, sondern ein Blockanfang. Nach deiner Interpretation könnte man auch nach
then ein ; setzen. Und was da passiert, wissen wir ja alle ;)
jaenicke - So 10.10.10 14:45
Martok hat folgendes geschrieben : |
| Würde mich mal interessieren, ob aktuelle Versionen da immer noch drüber stolpern. |
Ja, tun sie. Auf die Idee kommt einfach niemand. ;-)
Mein eigener Parser stolpert da übrigens auch.
bole - So 10.10.10 15:30
| Zitat: |
| Ja, tun sie. Auf die Idee kommt einfach niemand. ;-) |
Ich scheinbar schon... :lol:
Gruss
Bole
BenBE - So 10.10.10 15:40
Hat das denn schon mal jemand an Borland Inprise CodeGear Embarcadingsbums gemeldet?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!