Autor Beitrag
D. Annies
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Di 30.12.08 22:58 
Hi, Delpher,

ist für den folgenden (langweiligen) Code eine Vereinfachung möglich?

ausblenden volle Höhe 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:
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.Font.Name := ..OI
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 30.12.08 23:07 
Hallo,

ausblenden volle Höhe 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:
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..11of 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;

  // Initialisieren
  FillChar(total, SizeOf(total), #0);
  FillChar(male, SizeOf(male), #0);
  FillChar(female, SizeOf(female), #0);

  TbSchueler.first;
  while not TbSchueler.EOF do
  begin
    // Männlich/Weiblich und Klassenstufe ermitteln
    isMale = TbSchueler.fieldbyname('GESCHLECHT').asstring = 'm';
    Grade := StrToIntDef(TbSchueler.fieldbyname('KLASSE').asstring, 11);

    inc(total[11]); // Gesamt

    // Männlich / weiblich (11 = Gesamt)
    if isMale then
    begin  
      inc(male[11]);
      inc(male[Grade});
    end
    else
    begin
      inc(female[11]);
      inc(female[Grade});
   end;

    TbSchueler.next;
  end;

  { Die Anzeige kannst du dann ja selber machen :) }

  listbox6.clear;  //listbox6.Font.Name := ..OI
  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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Di 30.12.08 23:18 
Noch eine kleine Ergänzung, was die Übersicht steigert:
ausblenden 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
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: Di 30.12.08 23:27 
user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
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... :roll:

// 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Di 30.12.08 23:32 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
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... :roll:

Finde ich nicht - im Gegenteil.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: 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
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: Di 30.12.08 23:43 
user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
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... :roll:

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Mi 31.12.08 00:07 
Danke, Sebastian!

_________________
ut vires desint, tamen est laudanda voluntas
ImbaPanda
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98

Windows XP/Vista
Delphi 7 Professional/ Rad Studio 2009
BeitragVerfasst: Mi 31.12.08 00:18 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
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... :roll:




user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
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
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: Mi 31.12.08 00:30 
user profile iconImbaPanda hat folgendes geschrieben Zum zitierten Posting springen:
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. :nixweiss:
ImbaPanda
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98

Windows XP/Vista
Delphi 7 Professional/ Rad Studio 2009
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 31.12.08 01:09 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Es ist schlechter Stil
Quatsch. Schlechter Stil ist, wenn es unübersichtlich ist. Dazu gehört, und da hast Du vollkommen Recht, die Verwendung eines 'With'-Konstruktes eines VCL-Controis innerhalb einer Methode eines VCL-Controls. Böse. Ganz ganz böse. Und wird mit Teeren und Federn bestraft. Beispiel?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
Procedure TMyForm.Button1Click (Sender :TObject);
With TButton (Sender) Do Begin
  Caption := 'Foo'// Welche Caption? Form oder Buttoni? Wer's weiss, hat Glück, aber Lesbarkeit ist anders.
  AlphaBlend := 127// Ab Turbo-Supa-Dupa-Delphi 2012 haben Buttons vielleicht auch ein Alphablend?.... Fump.
End;

Ich verwende 'With' z.B. für die Tipp- und Leseerleichterung von artfremden Komponenten oder Records, bei denen eine ziemlich eindeutige Prefixnomenklatur zum Einsatz kommt.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
With MyRecord Do Begin
  mrCaption := 'Foo'// Klar, 'mr' ist der Prefix vom 'MyRecord' (weil der Typ irgendwie so heißt)
  AlphaBlend := 127// Aua, raus aus dem 'With', aber immerhin sieht man es.
End;

user profile iconImbaPanda hat folgendes geschrieben Zum zitierten Posting springen:
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^^

Es geht um die Optimierung von Code, a.k.a. Verwendung von Arrays und Metadaten. Nun, und nebenbei um Codeverkürzung und wie ein neckisches 'With' da (de)plaziert ist.

_________________
Na denn, dann. Bis dann, denn.
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: Mi 31.12.08 01:27 
user profile iconalzaimar hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 31.12.08 10:27 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconalzaimar hat folgendes geschrieben Zum zitierten Posting springen:
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. :gruebel:

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
... 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.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
.. 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. :lol:

In diesem Sinne: Einen guten Rutsch.

_________________
Na denn, dann. Bis dann, denn.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: 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 :wink2: :party:
Detlef

_________________
ut vires desint, tamen est laudanda voluntas
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: Mi 31.12.08 12:07 
user profile iconalzaimar hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Und genau dort verdirbt man sich eine leichte Debugmöglichkeit.
Das hat doch nichts mit Übersichtlichkeit zu tun. :gruebel:
Das habe ich ja auch nicht behauptet, aber es ist eben ein Nebeneffekt gerade bei den angesprochenen Records.

user profile iconalzaimar hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
... 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...
ausblenden volle Höhe Quelltext
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:
ausblenden volle Höhe Quelltext
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? :gruebel:
ausblenden 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.

user profile iconalzaimar hat folgendes geschrieben Zum zitierten Posting springen:
Ach, wenn man danach gehen würde, was so erzählt wird...
Verdreh mir doch nicht das Wort im Mund. :roll:
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.

user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
Guten Rutsch an alle :wink2: :party:
Ja, danke, dir auch. :D ;-)
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 31.12.08 14:26 
user profile iconalzaimar hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden 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 ;) .

user profile iconImbaPanda hat folgendes geschrieben Zum zitierten Posting springen:
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.

_________________
>λ=