| Autor |
Beitrag |
D. Annies
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Di 30.12.08 22:58
Hi, Delpher,
ist für den folgenden (langweiligen) Code eine Vereinfachung möglich?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61:
| procedure TForm1.Button88Click(Sender: TObject); var TempForm: TForm; r5, r6, r7, r8, r9, r10, rd, sum, sumj, summ, r5m, r5j, r6m, r6j, r7m, r7j, r8m, r8j, r9m, r9j, r1m, r1j, rdm, rdj : integer; begin TempForm := TForm.Create(Self); tempform.Parent := groupbox4; tempform.Align := alclient; tempform.BorderIcons := [bisystemmenu]; tempform.caption := 'Schüleranzahlen pro Klassenstufe'; listbox6.parent := tempform; listbox6.align := alclient; TempForm.Show; r5 := 0; r6 := 0; r7 := 0; r8 := 0; r9 := 0; r10 := 0; rd := 0; r5m := 0; r5j := 0; r6m := 0; r6j := 0; r7m := 0; r7j := 0; r8m := 0; r8j := 0; r9m := 0; r9j := 0; r1m := 0; r1j := 0; rdm := 0; rdj := 0; TbSchueler.first; while not TbSchueler.EOF do begin if TbSchueler.fieldbyname('KLASSE').asstring[1] = '5' then begin inc(r5); if TbSchueler.fieldbyname('GESCHLECHT').asstring = 'w' then inc(r5m) else inc(r5j); end; if TbSchueler.fieldbyname('KLASSE').asstring[1] = '6' then begin inc(r6); if TbSchueler.fieldbyname('GESCHLECHT').asstring = 'w' then inc(r6m) else inc(r6j); end; if TbSchueler.fieldbyname('KLASSE').asstring[1] = '7' then begin inc(r7); if TbSchueler.fieldbyname('GESCHLECHT').asstring = 'w' then inc(r7m) else inc(r7j); end; if TbSchueler.fieldbyname('KLASSE').asstring[1] = '8' then begin inc(r8); if TbSchueler.fieldbyname('GESCHLECHT').asstring = 'w' then inc(r8m) else inc(r8j); end; if TbSchueler.fieldbyname('KLASSE').asstring[1] = '9' then begin inc(r9); if TbSchueler.fieldbyname('GESCHLECHT').asstring = 'w' then inc(r9m) else inc(r9j); end; if TbSchueler.fieldbyname('KLASSE').asstring[1] = '1' then begin inc(r10); if TbSchueler.fieldbyname('GESCHLECHT').asstring = 'w' then inc(r1m) else inc(r1j); end; if TbSchueler.fieldbyname('KLASSE').asstring[1] = 'D' then begin inc(rd); if TbSchueler.fieldbyname('GESCHLECHT').asstring = 'w' then inc(rdm) else inc(rdj); end; TbSchueler.next; end; sum := r5+r6+r7+r8+r9+r10+rd; sumj := r5j+r6j+r7j+r8j+r9j+r1j+rdj; summ := r5m+r6m+r7m+r8m+r9m+r1m+rdm; listbox6.clear; listbox6.Items.Add(format(' ges = w / m', [])); listbox6.items.add(format('Schülerinnen und Schüler in R5 : %3d = %3d / %3d ', [r5, r5m, r5j])); listbox6.items.add(format('Schülerinnen und Schüler in R6 : %3d = %3d / %3d ', [r6, r6m, r6j])); listbox6.items.add(format('Schülerinnen und Schüler in R7 : %3d = %3d / %3d ', [r7, r7m, r7j])); listbox6.items.add(format('Schülerinnen und Schüler in R8 : %3d = %3d / %3d ', [r8, r8m, r8j])); listbox6.items.add(format('Schülerinnen und Schüler in R9 : %3d = %3d / %3d ', [r9, r9m, r9j])); listbox6.items.add(format('Schülerinnen und Schüler in R10 : %3d = %3d / %3d ', [r10, r1m, r1j])); listbox6.items.add(format('Schülerinnen und Schüler in DaZ : %3d = %3d / %3d ', [rd, rdm, rdj])); listbox6.items.add('---------------------'); listbox6.Items.Add(format(' Mädchen / Jungen : %3d / %3d ', [summ, sumj])); listbox6.items.add('---------------------'); listbox6.items.add(format('Schüler der Schule gesamt : %3d ', [sum])); end; |
Danke für eine Idee. Wenn es nicht geht, ist auch ok.
Gruß, Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Di 30.12.08 23:07
Hallo,
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56:
| procedure TForm1.Button88Click(Sender: TObject); var TempForm: TForm; total, male, female: array[5..11] of Integer; isMale, Grade: Boolean; begin TempForm := TForm.Create(Self); tempform.Parent := groupbox4; tempform.Align := alclient; tempform.BorderIcons := [bisystemmenu]; tempform.caption := 'Schüleranzahlen pro Klassenstufe'; listbox6.parent := tempform; listbox6.align := alclient; TempForm.Show;
FillChar(total, SizeOf(total), #0); FillChar(male, SizeOf(male), #0); FillChar(female, SizeOf(female), #0);
TbSchueler.first; while not TbSchueler.EOF do begin isMale = TbSchueler.fieldbyname('GESCHLECHT').asstring = 'm'; Grade := StrToIntDef(TbSchueler.fieldbyname('KLASSE').asstring, 11);
inc(total[11]); if isMale then begin inc(male[11]); inc(male[Grade}); end else begin inc(female[11]); inc(female[Grade}); end;
TbSchueler.next; end;
listbox6.clear; listbox6.Items.Add(format(' ges = w / m', [])); listbox6.items.add(format('Schülerinnen und Schüler in R5 : = = = / = ', [r5, r5m, r5j])); listbox6.items.add(format('Schülerinnen und Schüler in R6 : = = = / = ', [r6, r6m, r6j])); listbox6.items.add(format('Schülerinnen und Schüler in R7 : = = = / = ', [r7, r7m, r7j])); listbox6.items.add(format('Schülerinnen und Schüler in R8 : = = = / = ', [r8, r8m, r8j])); listbox6.items.add(format('Schülerinnen und Schüler in R9 : = = = / = ', [r9, r9m, r9j])); listbox6.items.add(format('Schülerinnen und Schüler in R10 : = = = / = ', [r10, r1m, r1j])); listbox6.items.add(format('Schülerinnen und Schüler in DaZ : = = = / = ', [rd, rdm, rdj])); listbox6.items.add('---------------------'); listbox6.Items.Add(format(' Mädchen / Jungen : = / = ', [summ, sumj])); listbox6.items.add('---------------------'); listbox6.items.add(format('Schüler der Schule gesamt : = ', [sum])); end; | (Ungetestet)
Grüße,
Yogu
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Di 30.12.08 23:18
Noch eine kleine Ergänzung, was die Übersicht steigert:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| with Listbox1.Items do begin Add(Format('Schülerinnen und Schüler in R5 : %3d = %3d / %3d ', [r5, r5m, r5j])); Add(Format('Schülerinnen und Schüler in R6 : %3d = %3d / %3d ', [r6, r6m, r6j])); Add(Format('Schülerinnen und Schüler in R7 : %3d = %3d / %3d ', [r7, r7m, r7j])); Add(Format('Schülerinnen und Schüler in R8 : %3d = %3d / %3d ', [r8, r8m, r8j])); Add(Format('Schülerinnen und Schüler in R9 : %3d = %3d / %3d ', [r9, r9m, r9j])); Add(Format('Schülerinnen und Schüler in R10 : %3d = %3d / %3d ', [r10, r1m, r1j])); Add(Format('Schülerinnen und Schüler in DaZ : %3d = %3d / %3d ', [rd, rdm, rdj])); Add('---------------------'); Add(Format(' Mädchen / Jungen : %3d / %3d ', [summ, sumj])); Add('---------------------'); Add(Format('Schüler der Schule gesamt : %3d ', [sum])); end; |
Grüße,
Marc
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 30.12.08 23:27
Marc. hat folgendes geschrieben : | | Noch eine kleine Ergänzung, was die Übersicht steigert: |
Dafür gilt es als schlechter Stil und führt oft zu Fehlern, wie man an den vielen Fragen sieht, die deshalb schon im Forum gestellt wurden...
// EDIT:
Mal abgesehen davon, dass es mit dem Array ohnehin nicht mehr so viele ähnliche Zeilen sind. 
Zuletzt bearbeitet von jaenicke am Di 30.12.08 23:32, insgesamt 1-mal bearbeitet
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Di 30.12.08 23:27
Hi, Marc und Yogu!
Danke für eure Ideen - das ist wesentlich kürzer / besser. Dann werde ich mich mal ans Übertragen machen,
Gruß, Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Di 30.12.08 23:32
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Di 30.12.08 23:40
Hi, Sebastian,
aber in diesem Fall ist With doch ok, oder?
Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 30.12.08 23:43
D. Annies hat folgendes geschrieben : | | aber in diesem Fall ist With doch ok, oder? |
Es ist immer ok. Nur wenn man nicht aufpasst, dann hat man Fehler, die man sich erstmal nicht erklären kann.
Marc. hat folgendes geschrieben : | jaenicke hat folgendes geschrieben : | Marc. hat folgendes geschrieben : | | Noch eine kleine Ergänzung, was die Übersicht steigert: | Dafür gilt es als schlechter Stil und führt oft zu Fehlern, wie man an den vielen Fragen sieht, die deshalb schon im Forum gestellt wurden...  |
Finde ich nicht - im Gegenteil. |
Nur ein Beispiel, an das ich mich gerade noch erinnert habe:
www.delphi-forum.de/....php?p=538689#538689
Und diese und ähnliche Fehler sorgen immer wieder für Verwirrung. Meistens eher in der Form, dass das ganze nicht kompilierbar ist, aber eben auch solche "unerklärlichen" Sachen.
Und noch ein ganz anderer Nachteil:
Man kann nicht einfach die Maustaste beim Debuggen über das Feld eines Records z.B. halten um den Wert zu sehen, da Delphi in dem Fall nicht weiß, dass es das aus with dazu nehmen muss zur Auswertung.
Aber in diesem Fall sind das ja ohnehin nicht mehr so viele Zeilen am Ende, da brauchts ohnehin kein with.
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Mi 31.12.08 00:07
Danke, Sebastian!
_________________ ut vires desint, tamen est laudanda voluntas
|
|
ImbaPanda
      
Beiträge: 98
Windows XP/Vista
Delphi 7 Professional/ Rad Studio 2009
|
Verfasst: Mi 31.12.08 00:18
jaenicke hat folgendes geschrieben : | Marc. hat folgendes geschrieben : | | Noch eine kleine Ergänzung, was die Übersicht steigert: | Dafür gilt es als schlechter Stil und führt oft zu Fehlern, wie man an den vielen Fragen sieht, die deshalb schon im Forum gestellt wurden...
|
jaenicke hat folgendes geschrieben : | D. Annies hat folgendes geschrieben : | | aber in diesem Fall ist With doch ok, oder? | Es ist immer ok. Nur wenn man nicht aufpasst, dann hat man Fehler, die man sich erstmal nicht erklären kann.
|
Klingt ganz anders oder?
Naja, es ist halt Geschmackssache, was jeder verwendet und damit sollte auch das Ende der Diskussion hier sein. Ich denke jetzt , dass dies für D.Annies' Fragestellung relativ unrelevant ist. Bei tiefgreifenderen Dingen kann man sicherlich nochmal genauer auf die Differenzen bezüglich der 2 Verwendungsweisen eingehen, aber momentan trägt dies nicht wirklich zu einem Ergebnis bei.
@D.Annies: Ein kleiner Tipp an dich, du solltest dich schon früh daran gewöhnen Kommentare in deinen Code miteinzufügen, da diese deutlich die Übersicht fördern. So etwas kann nie schaden und ist zumal sehr hilfreicht 
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 31.12.08 00:30
ImbaPanda hat folgendes geschrieben : | | Klingt ganz anders oder? |
Es ist schlechter Stil, aber es ist natürlich ok, wenn jemand Code so schreiben möchte. Es gibt auch StyleGuides, wie man Quelltext am besten formatieren sollte. Trotzdem kann man es natürlich auch anders machen (und machen ja auch viele leider).
Man muss eben in beiden Fällen damit rechnen, dass der Code nicht so gerne von anderen benutzt wird, schlechter lesbar oder wartbar ist, etc., aber es ist ok, man kann ja niemanden zwingen. 
|
|
ImbaPanda
      
Beiträge: 98
Windows XP/Vista
Delphi 7 Professional/ Rad Studio 2009
|
Verfasst: Mi 31.12.08 00:36
Es geht hier gar nicht um die Quellcode-Formatierung, wie sie zu sein hat bzw sollte. oder ähnliches, es geht lediglich um die Verwendung des "With - Do" Befehls^^
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mi 31.12.08 01:09
_________________ Na denn, dann. Bis dann, denn.
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 31.12.08 01:27
alzaimar hat folgendes geschrieben : | | Ich verwende 'With' z.B. für die Tipp- und Leseerleichterung von artfremden Komponenten oder Records |
Und genau dort verdirbt man sich eine leichte Debugmöglichkeit. Eben weil man den Inhalt von with kopieren, den fraglichen Teil markieren, Strg + F7 drücken und das Kopierte einfügen muss. Und erst dann sieht man den Inhalt (oder man überwacht den Ausdruck).
Wenn man es ohne with schreibt, hält man einfach die Maus drüber und damit hat sich die Sache.
Idealerweise macht man natürlich gar nicht erst Fehler, aber es passiert eben manchmal doch...
Bei geschachtelten Ausdrücken (xy.xy2.xy3) mag with das Ganze abkürzen, man kann aber genauso gut eine Zwischenvariable benutzen, denn nichts anderes bewirkt with ja. Nur dass man nicht auf das einfache Debugging und die Lesbarkeit des Codes verzichtet.
Wie gesagt: Es muss jeder selbst wissen, aber die Fragen wegen durch with verursachten Problemen hier im Forum und an anderen Stellen (ICQ...) sprechen eine deutliche Sprache...
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mi 31.12.08 10:27
jaenicke hat folgendes geschrieben : | alzaimar hat folgendes geschrieben : | | Ich verwende 'With' z.B. für die Tipp- und Leseerleichterung von artfremden Komponenten oder Records | Und genau dort verdirbt man sich eine leichte Debugmöglichkeit. |
Das hat doch nichts mit Übersichtlichkeit zu tun.
jaenicke hat folgendes geschrieben : | | ... man kann aber genauso gut eine Zwischenvariable benutzen, denn nichts anderes bewirkt with ja. |
Nein, nicht ganz. Eine Zwischenvariable verbrät ein paar Pikosekunden, während bei 'with' garantiert wird, das es nicht langsamer wird. Ist aber extreme Erbsenzählerei. Aber eine ist Zwischenvariable fast genauso gut. Allerdings finde ich, das eine 'Variable', die ansonsten nicht angefasst (=verändert) wird, ja keine Variable im eigentlichen Sinn, sondern eher eine Krücke ist. Von der Übersichtlichkeit nimmt sich das aber nichts. Im Gegenteil, manchmal wird Code durch so eine Hilfsvariable auch übersichtlicher.
jaenicke hat folgendes geschrieben : | | .. aber die Fragen wegen durch with verursachten Problemen hier im Forum und an anderen Stellen (ICQ...) sprechen eine deutliche Sprache... |
Fresst Sch**** 100.000.000 Fliegen können nicht irren? Ach, wenn man danach gehen würde, was so erzählt wird... 99.9% Der 'Programmierer' plappern eh nur das nach, was ein paar 'Gurus' so von sich geben. Und selbst die 'Gurus' verzapfen häufig Mist (z.B. 'Goto' ist immer bäh, 'Break' und 'Exit' auch! Was für ein Schwachsinn).
Es kommt immer darauf an, was man mit den zur Verfügung gestellten Werkzeugen so anstellt, denn es gibt z.B. auch in modereren Programmiersprachen ähnliche Konstrukte (C#: using (....) {}'.
Zugegeben und bereits durchgekaut kann ein 'with' zu Murks führen, aber das schafft ein 'Move', Rekursion, Pointer-Arithmetik, Threads usw. auch. Wenn man nicht mit den Dingen umgehen kann, dann soll man es halt lassen.
Und wenn man nach den Problemen in der Gemeinde (Foren, ICQ, Nachrichten) gehen würde, wäre sämtlicher C-Code erstmal vollständig zu verbannen.
In diesem Sinne: Einen guten Rutsch.
_________________ Na denn, dann. Bis dann, denn.
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Mi 31.12.08 10:41
Welch "heiliges" Gewitter habe ich ausgelöst ...
Aber sehr interessant .. und (nicht böse sein!)
Na, dann denn - und bis denn, dann!
Guten Rutsch an alle
Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 31.12.08 12:07
alzaimar hat folgendes geschrieben : | jaenicke hat folgendes geschrieben : | | Und genau dort verdirbt man sich eine leichte Debugmöglichkeit. | Das hat doch nichts mit Übersichtlichkeit zu tun.  |
Das habe ich ja auch nicht behauptet, aber es ist eben ein Nebeneffekt gerade bei den angesprochenen Records.
alzaimar hat folgendes geschrieben : | jaenicke hat folgendes geschrieben : | | ... man kann aber genauso gut eine Zwischenvariable benutzen, denn nichts anderes bewirkt with ja. | Nein, nicht ganz. Eine Zwischenvariable verbrät ein paar Pikosekunden, während bei 'with' garantiert wird, das es nicht langsamer wird. | Das erkläre mir mal am erzeugten Assemblercode... ich hab mal ganz fix ein kleines Beispiel gebastelt... 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| Unit116.pas.42: a := TTest.Create; 00457EE3 B201 mov dl,$01 00457EE5 A1A87C4500 mov eax,[$00457ca8] 00457EEA E839B9FAFF call TObject.Create 00457EEF 8BD8 mov ebx,eax Unit116.pas.43: a.fTest := TTest1.Create; 00457EF1 B201 mov dl,$01 00457EF3 A1547C4500 mov eax,[$00457c54] 00457EF8 E82BB9FAFF call TObject.Create 00457EFD 894304 mov [ebx+$04],eax
Unit116.pas.44: with a.Test do 00457F00 8BC3 mov eax,ebx 00457F02 E869000000 call TTest.GetTest 00457F07 8BF0 mov esi,eax Unit116.pas.46: ShowMessage(IntToStr(geta())); 00457F09 8BC6 mov eax,esi 00457F0B E884000000 call TTest1.geta 00457F10 8D55FC lea edx,[ebp-$04] 00457F13 E8C406FBFF call IntToStr 00457F18 8B45FC mov eax,[ebp-$04] 00457F1B E81444FDFF call ShowMessage Unit116.pas.47: ShowMessage(IntToStr(geta())); 00457F20 8BC6 mov eax,esi 00457F22 E86D000000 call TTest1.geta 00457F27 8D55F8 lea edx,[ebp-$08] 00457F2A E8AD06FBFF call IntToStr 00457F2F 8B45F8 mov eax,[ebp-$08] 00457F32 E8FD43FDFF call ShowMessage
Unit116.pas.49: a.fTest.Free; 00457F37 8B4304 mov eax,[ebx+$04] 00457F3A E819B9FAFF call TObject.Free Unit116.pas.50: a.Free; 00457F3F 8BC3 mov eax,ebx 00457F41 E812B9FAFF call TObject.Free Unit116.pas.51: end; 00457F46 33C0 xor eax,eax 00457F48 5A pop edx 00457F49 59 pop ecx 00457F4A 59 pop ecx | gegenüber einer Zwischenvariable: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| Unit116.pas.74: a := TTest.Create; 00457FCF B201 mov dl,$01 00457FD1 A1A87C4500 mov eax,[$00457ca8] 00457FD6 E84DB8FAFF call TObject.Create 00457FDB 8BD8 mov ebx,eax Unit116.pas.75: a.fTest := TTest1.Create; 00457FDD B201 mov dl,$01 00457FDF A1547C4500 mov eax,[$00457c54] 00457FE4 E83FB8FAFF call TObject.Create 00457FE9 894304 mov [ebx+$04],eax
Unit116.pas.76: b := a.Test; 00457FEC 8BC3 mov eax,ebx 00457FEE E87DFFFFFF call TTest.GetTest 00457FF3 8BF0 mov esi,eax Unit116.pas.77: ShowMessage(IntToStr(b.geta())); 00457FF5 8BC6 mov eax,esi 00457FF7 E898FFFFFF call TTest1.geta 00457FFC 8D55FC lea edx,[ebp-$04] 00457FFF E8D805FBFF call IntToStr 00458004 8B45FC mov eax,[ebp-$04] 00458007 E82843FDFF call ShowMessage Unit116.pas.78: ShowMessage(IntToStr(b.geta())); 0045800C 8BC6 mov eax,esi 0045800E E881FFFFFF call TTest1.geta 00458013 8D55F8 lea edx,[ebp-$08] 00458016 E8C105FBFF call IntToStr 0045801B 8B45F8 mov eax,[ebp-$08] 0045801E E81143FDFF call ShowMessage
Unit116.pas.79: a.fTest.Free; 00458023 8B4304 mov eax,[ebx+$04] 00458026 E82DB8FAFF call TObject.Free Unit116.pas.80: a.Free; 0045802B 8BC3 mov eax,ebx 0045802D E826B8FAFF call TObject.Free Unit116.pas.81: end; 00458032 33C0 xor eax,eax 00458034 5A pop edx 00458035 59 pop ecx 00458036 59 pop ecx | Unterschied?  Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| TTest1 = class function geta: Integer; end;
TTest = class fTest: TTest1; function GetTest: TTest1; property Test: TTest1 read GetTest; end; ... var a: TTest; b: TTest1; | Eine Optimierung was die Registerverwendung angeht passiert ja auch bei Variablen.
alzaimar hat folgendes geschrieben : | | Ach, wenn man danach gehen würde, was so erzählt wird... |
Verdreh mir doch nicht das Wort im Mund.
Ich sagte, dass es immer wieder Fragen gibt, weil jemand durch die Auswirkungen der Anwendung von with Probleme hat. Wenn jemand sagt, dass etwas schlecht ist, ist das eine ganz andere Sache.
Natürlich ist with bei richtiger Anwendung nichts schlechtes. Dass aber genau diese richtige Anwendung oft ein Problem ist, ist daran zu sehen. Und deshalb glaube ich nicht, dass es für jeden übersichtlicher oder verständlicher ist.
D. Annies hat folgendes geschrieben : | Guten Rutsch an alle |
Ja, danke, dir auch. 
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mi 31.12.08 14:26
alzaimar hat folgendes geschrieben : | | Es kommt immer darauf an, was man mit den zur Verfügung gestellten Werkzeugen so anstellt, denn es gibt z.B. auch in modereren Programmiersprachen ähnliche Konstrukte (C#: using (....) {}'. |
Na, die zwei haben nun wirklich überhaupt nichts miteinander zu tun  . Im Zusammenhang mit Records könnte man vielleicht Object Initializers nennen:
C#-Quelltext 1: 2: 3: 4:
| new Year { Year = 2009, HasLeapSecond = true, Comment = "Fröhliche Weihnachten!" } | Bei denen kann aber im Gegensatz zu with kaum etwas schiefgehen  .
ImbaPanda hat folgendes geschrieben : | | Es geht hier gar nicht um die Quellcode-Formatierung, wie sie zu sein hat bzw sollte. oder ähnliches, es geht lediglich um die Verwendung des "With - Do" Befehls^^ |
Im Gegensatz zu den Control Flow Statements if/while/... (und eben auch using) ist with ein rein syntaktisches Konstrukt. Der "Befehl" selbst macht eigentlich überhaupt nichts, dafür kommt danach kein Wald-und-Wiesen-Codeblock, sondern einer mit speziellen Parsing-Regeln. with ist also wirklich nichts Anderes als Code-Formatierung und damit Geschmackssache (oder Style-Guide-Sache). Wie es auch Geschmackssache ist, ob man ein Language-Feature vermeidet, weil der Debugger zu dumm ist.
_________________ >λ=
|
|
|