| Autor |
Beitrag |
bole
      
Beiträge: 107
Erhaltene Danke: 15
win 10
|
Verfasst: Sa 09.10.10 01:31
Hallo
Ich habe in thread über Schleifenabbruch www.delphi-forum.de/...=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.
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
_________________ ein programm macht nicht das was du willst sondern was du schreibst!
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 107
Erhaltene Danke: 15
win 10
|
Verfasst: Sa 09.10.10 14:04
Hallo
Schon in der Vorschau ist nur das Code Gerüst.
Ich verwende Turbo Delphi 2006.
Gruss
Bole
_________________ ein programm macht nicht das was du willst sondern was du schreibst!
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 09.10.10 14:20
Hinter dem begin vor dem Bereich ist ein Semikolon, ich vermute daran liegt es.
|
|
bole 
      
Beiträge: 107
Erhaltene Danke: 15
win 10
|
Verfasst: 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
_________________ ein programm macht nicht das was du willst sondern was du schreibst!
|
|
delphi10
      
Beiträge: 447
Erhaltene Danke: 2
W2K, XP, Vista64, Win7 64
RAD-Studio 2010
|
Verfasst: 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.
_________________ Salus populi suprema lex esto
|
|
bole 
      
Beiträge: 107
Erhaltene Danke: 15
win 10
|
Verfasst: 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
_________________ ein programm macht nicht das was du willst sondern was du schreibst!
|
|
Tankard
      

Beiträge: 217
Erhaltene Danke: 96
|
Verfasst: 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
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: 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 
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 107
Erhaltene Danke: 15
win 10
|
Verfasst: So 10.10.10 15:30
| Zitat: | Ja, tun sie. Auf die Idee kommt einfach niemand.  |
Ich scheinbar schon...
Gruss
Bole
_________________ ein programm macht nicht das was du willst sondern was du schreibst!
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 10.10.10 15:40
Hat das denn schon mal jemand an Borland Inprise CodeGear Embarcadingsbums gemeldet?
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|