Autor Beitrag
bole
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 107
Erhaltene Danke: 15

win 10

BeitragVerfasst: 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 user profile iconjaenicke 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
ausblenden 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 > 0and (MarktPosIX >= i) do
     begin;
       If Marktpos[i].Quali=q then
       begin;
         If Marktpos[i].Anz >= Rest then
         Begin
         // angebot kann nachfrage decken
           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;
         // angebot kann nachfrage nicht decken
           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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 107
Erhaltene Danke: 15

win 10

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 09.10.10 14:20 
Hinter dem begin vor dem Bereich ist ein Semikolon, ich vermute daran liegt es.
bole Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 107
Erhaltene Danke: 15

win 10

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: So 10.10.10 00:25 
user profile iconbole hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 107
Erhaltene Danke: 15

win 10

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Administrator
Beiträge: 217
Erhaltene Danke: 96



BeitragVerfasst: So 10.10.10 14:07 
Richtiges Pascal verlangt nicht wirkliche immer ein ;

zb.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
program test;
begin
  if ausdruck then
    begin
      anweisung1;
      anweisung2       // hier kommt eigentlich kein ; hin
    end
  else
    anweisung3        //hier auch nicht da letzter befehl for end
end.



wobei delphi bei diesen sachen ne fehler meldet.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: So 10.10.10 14:31 
Und wie mir user profile iconBenBE 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.


user profile iconbole hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 10.10.10 14:45 
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 107
Erhaltene Danke: 15

win 10

BeitragVerfasst: So 10.10.10 15:30 
Zitat:
Ja, tun sie. Auf die Idee kommt einfach niemand. ;-)


Ich scheinbar schon... :lol:

Gruss
Bole

_________________
ein programm macht nicht das was du willst sondern was du schreibst!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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.