Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Quelltext kommentieren (https://www.delphipraxis.net/109743-quelltext-kommentieren.html)

gmc616 6. Mär 2008 22:48

Re: Quelltext kommentieren
 
<IRONIE>
33,33% -> 50% :kiss:
</IRONIE>

Tharon 6. Mär 2008 23:30

Re: Quelltext kommentieren
 
Zitat:

Zitat von gmc616
Oho, so wie's scheint hab ich vergessen meinen Post in IRONIE-Tag zu setzten.

Dachte eigentlich, das mit dem Satz "Mehr läßt sich auch den 5 Zeilen nicht entnehmen" alles gesagt wäre.

Mag sein, dass Du das ironisch gemeint hast (was ich hoffe :wink: )... aber woher soll das ein Anfänger wissen??? Der denkt wahrscheinlich, so sollten die Kommentare wirklich aussehen...


Zitat:

Zitat von s-off
Zitat:

Zitat von Phoenix
Es könnte eine Variable Namens Rect geben, aber benutzt wird Control.Rect. Eine der bösen Fallen bei with...

Da muss ich DIr leider widersprechen; probier's aus:
Delphi-Quellcode:
Procedure TForm1.MalDas(Control: TControl);
Var
   Rect: TRect;
Begin
   Rect.Left := 10;
   Rect.Top := 10;
   Rect.Right := 60;
   Rect.Bottom := 60;

   //alles was hier drüber steht, kennen wir nicht - könnte ja eine lokale Variable sein *g*
   With Control As TListBox Do Begin
      Canvas.Brush.Color := clYellow;
      Canvas.FillRect(Rect);
      Canvas.Font.Color := clRed;
      Canvas.TextOut(Rect.Left + 2, Rect.Top, 'Hallo');
   End;
End;
Hier wird die lokale Variable Rect zugrunde gelegt.

Also... with gehört IMHO mit zu den schrecklichsten Sprachkonstrukten überhaupt *schauder*
Nicht nur, dass der Code schwieriger lesbar wird (vor allem bei langen with-Blöcken und gerade da würde ein with überhaupt nur Sinn machen), es wird auch <IRONIE>unheimlich das Debuggen erleichtert&lt;/IRONIE&amp;gt;... :wink:

Ich finde, with sollte grundsätzlich nicht verwendet werden (in eigenem Code). Es gibt auch keinen Grund dafür... außer um anderen das Leben schwerer zu machen. Code sollte wenn möglich so geschrieben sein, dass er möglichst einfach und schnell zu verstehen, zu warten und zu debuggen ist.

Auch der Cast in dem with-Block ist kein Argument, denn man kann sich einfach mit einer lokalen Variablen behelfen:

Delphi-Quellcode:
Procedure TForm1.MalDas(Control: TControl);
Var
   rect:   TRect;
   lst:    TListBox;
Begin
   rect.Left := 10;
   rect.Top := 10;
   rect.Right := 60;
   rect.Bottom := 60;


   // alles was hier drüber steht, kennen wir nicht - könnte ja eine lokale Variable sein *g*
   With Control As TListBox Do Begin
      Canvas.Brush.Color := clYellow;
      Canvas.FillRect(Rect);
      Canvas.Font.Color := clRed;
      Canvas.TextOut(Rect.Left + 2, Rect.Top, 'Hallo');
   End;

   // diese Variante kommt ohne with aus... und es ist nicht wirklich mehr zu tippen... habe die
   // Zeichen jetzt aber nicht gezählt *g*
   lst := (Control as TListBox);
   lst.Canvas.Brush.Color := clYellow;
   lst.Canvas.FillRect(lst.Rect);
   lst.Canvas.Font.Color := clRed;
   lst.Canvas.TextOut(lst.Rect.Left + 2, lst.Rect.Top, 'Hallo');
End;
Wobei in diesem Beispiel der Cast in TListBox sowieso unnötig ist - mal nebenbei bemerkt - aber es ging ja jetzt ums Prinzip :wink:

Allerdings ist diese Diskussion jetzt grade etwas off-topic...
Daher noch was zu der ursprünglichen Frage von coocky:

Die schlechtesten Kommentare sind die, welche schlicht falsch sind (weil z.B. von irgendwoher kopiert und nicht angepasst wurden), da sie nicht nur ihren Sinn nicht erfüllen, sondern den Leser auch noch in die Irre führen...
Daher Kommentare immer sehr sorgfältig schreiben!

Schlicht sinnlos sind Kommentare, die einfach nur den Code in unsere Sprache übersetzen - Kommentare sind nicht dazu gedacht, dem Leser die Sprache beizubringen!

Delphi-Quellcode:
// völlig sinnloser Kommentar...
Canvas.TextOut(Rect.Left + 2, Rect.Top, 'Hallo');   // Schreibe 'Hallo' auf die Zeichenfläche des Controls

// das ist so wie...
i := i + 1;   // erhöhe i um 1
Kommentare sollen z.B. erklären, warum man etwas macht... oder warum gerade so und nicht anders... oder können einfach zur Strukturierung des Codes verwendet werden, wie Überschriften in einem Text... nur um mal ein paar wenige Beipiele zu nennen :wink:

Delphi-Quellcode:
// Hierdurch soll erreicht werden, dass.... blabla...
//
// Diese Variante wurde gewählt, weil... blabla...
//
// ACHTUNG:
// Es wird hier nicht überprüft, ob Items.Objects[Index] auch in TColor gecastet werden kann!
// Es sollte unbedingt noch eine entsprechende Prüfung eingebaut werden und im Falle eines ungültigen Wertes
// eine festgelegte Standardfarbe verwendet werden!
//
// TODO: Prüfung auf gültigen Farbwert in Items.Objects[Index]!      (&lt;-- Dies erzeugt einen Eintrag in der Delphi-ToDo-Liste)
//
with Control as TListBox do begin
  Canvas.FillRect(Rect);
  Canvas.FontColor := TColor(Items.Objects[Index]);
  Canvas.TextOut(Rect.Left + 2, Rect.Top, Items[Index]);
end;
So... das mal so als Anregung :wink:

Aurelius 7. Mär 2008 08:13

Re: Quelltext kommentieren
 
Klar sollen Kommentare das Ganze nicht in "unsere" Sprache übersetzen. Aber als Erklärung für Anfänger ist sowas dann doch geeignet

RavenIV 7. Mär 2008 08:16

Re: Quelltext kommentieren
 
Zitat:

Zitat von Tharon
schnip - schnap

Ich gebe Dir in allen erwähnten Punkten volle Zustimmung.

Endlich einer, der auf der selben Wellenlänge schwimmt wie ich. :hello: :hi:

jottkaerr 7. Mär 2008 08:49

Re: Quelltext kommentieren
 
Hallo s-off, Hallo Phoenix,

Zitat:

Zitat von s-off
Zitat:

Zitat von Phoenix
Es könnte eine Variable Namens Rect geben, aber benutzt wird Control.Rect. Eine der bösen Fallen bei with...

Da muss ich DIr leider widersprechen; probier's aus:
Delphi-Quellcode:
Procedure TForm1.MalDas(Control: TControl);
Var
   Rect: TRect;
Begin
   Rect.Left := 10;
   Rect.Top := 10;
   Rect.Right := 60;
   Rect.Bottom := 60;

   //alles was hier drüber steht, kennen wir nicht - könnte ja eine lokale Variable sein *g*
   With Control As TListBox Do Begin
      Canvas.Brush.Color := clYellow;
      Canvas.FillRect(Rect);
      Canvas.Font.Color := clRed;
      Canvas.TextOut(Rect.Left + 2, Rect.Top, 'Hallo');
   End;
End;
Hier wird die lokale Variable Rect zugrunde gelegt.

Phoenix hat im Prinzip Recht -- wenn TListBox ein Property Rect hätte, würde die lokale Variable versteckt. s-offs Beispiel beweist hier nichts, denn erst durch sein Hinzufügen einer lokalen Variable wird das Beispiel kompilierbar. Die ursprüngliche Variante lässt sich wegen des fehlenden TControl.Rect bzw. TListBox.Rect gar nicht übersetzen.

jkr

s-off 7. Mär 2008 10:36

Re: Quelltext kommentieren
 
Hallo Jürgen,

was möchtest Du mir jetzt mitteilen?
Zitat:

Zitat von jottkaerr
Phoenix hat im Prinzip Recht -- wenn TListBox ein Property Rect hätte, würde die lokale Variable versteckt.

Hat es aber nicht.

Zitat:

Zitat von jottkaerr
s-offs Beispiel beweist hier nichts, denn erst durch sein Hinzufügen einer lokalen Variable wird das Beispiel kompilierbar. Die ursprüngliche Variante lässt sich wegen des fehlenden TControl.Rect bzw. TListBox.Rect gar nicht übersetzen.
jkr

Ja, natürlich ist das nur durch Hinzufügen der Variable kompilierbar - ich habe auch nichts anderes behauptet:
Zitat:

Zitat von s-off
Woher weißt Du, dass 'Rect' keine Variable ist, die ganz andere Maße hat, als das Control?

Wir wissen nicht, ob Rect eine Variable ist, oder nicht.

Mein Beispiel sollte zeigen, dass, wenn meine Annahme, dass Rect eine Variable ist, zutrifft, diese gezogen wird, - und das tut es - da gibt es nichts dran zu rütteln.

jottkaerr 7. Mär 2008 11:00

Re: Quelltext kommentieren
 
Hallo s-off,

ich hatte Phoenix so verstanden (und tue das noch immer), dass er von einem vorhandenen Property TListBox.Rect ausging, das innerhalb der with-Anweisung eine eventuell vorhandene lokale Variable Rect versteckt. Ich war davon ausgegangen, dass Du
Zitat:

Es könnte eine Variable Namens Rect geben, aber benutzt wird Control.Rect. Eine der bösen Fallen bei with...
ebenfalls so interpretierst.

Dich hatte ich daher so verstanden, dass, auch wenn es ein TListBox.Rect gäbe, die lokale Variable Vorrang hätte und Du ein Gegenbeispiel zu Phoenix' Behauptung bringen wolltest.

Meine Aussage war daher: Wenn Phoenix' Annahme wahr wäre, würde Dein Gegenbeispiel nicht zeigen, dass eine lokale Variable verwendet wird.

jkr

s-off 7. Mär 2008 11:04

Re: Quelltext kommentieren
 
Huhu,

ok, dann war das ein klassischer aneinandervorbeiredner und wir haben alle auf unsere Art recht :zwinker:

stahli 7. Mär 2008 12:03

Re: Quelltext kommentieren
 
OT: Der arme coocky :wink:
... stellt eine einfache Frage und hat jetzt Kopfschmerzen...

(Aber wenn es noch Fragen gibt, trau Dich trotzdem wieder! :lol: )

stahli


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz