![]() |
Quelltext kommentieren
Hey, ich habe folgenden Quelltext in ein Programm eingefügt und soll diesen jetzt kommentieren, versteh ihn aber nicht. Könntet ihr ihn bitte kommentieren? Und Weiß jemand, wie man diesen Quelltext in einem Struktogramm darstellt, weil ich die Struktur with as noch nicht kenne.
Delphi-Quellcode:
begin
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; end; |
Re: Quelltext kommentieren
Zitat:
|
Re: Quelltext kommentieren
Die Online-Hilfe könnte dir dabei sehr behilflich sein!
Einfach z.B. den Caret ("Text-Cursor") auf FillRect setzen und F1 drücken. Schon gelangst du in die Hilfe, wo einiges erklärt wird. Wenn du dann immer noch Verständnis-Probleme hast, dann frag einfach nach. Zu "with ... as ... do": das "Objekt" Control soll wie eine TListBox behandelt werden. Zwischen dem begin und dem end steht, was mit diesem Objekt passieren soll (in deinem Beipsiel wird die Canvas - also die Zeichenfläche - benutzt). Hoffe, ich konnte dir auf die Schnelle zumindest etwas weiterhelfen ;-) Patti |
Re: Quelltext kommentieren
Delphi-Quellcode:
Mehr läßt sich auch den 5 Zeilen nicht entnehmen
begin
with Control as TListBox do begin // Mit dem gewählten Control Canvas.FillRect(Rect); // mal ein Viereck, so groß wie das Control ist Canvas.FontColor:=TColor(Items.Objects[Index]); // Setze Schriftart, so wie irgendwo gewählt Canvas.TextOut(Rect.Left +2, Rect.Top, Items[Index]); // Schreibe einen String aufs Control end; end; |
Re: Quelltext kommentieren
Und das sind genau die Art von Quellcode-Kommentaren, die man nicht machen soll. Das Offensichtliche muss nicht noch zusätzlich kommentiert werden. (Infos für Anfänger mal ausgenommen).
|
Re: Quelltext kommentieren
Zitat:
Desweiteren hast Du die grundlegende Eigenschaft der Methode 'FillRect' unterschlagen. Zitat:
Wie bereits gesagt wurde, ist es besser, mal die Hilfe zu bemühen, als noch falsche Sachen zu lernen. |
Re: Quelltext kommentieren
Zitat:
|
Re: Quelltext kommentieren
Zitat:
Delphi-Quellcode:
Hier wird die lokale Variable Rect zugrunde gelegt.
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; |
Re: Quelltext kommentieren
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. |
Re: Quelltext kommentieren
Zitat:
|
Re: Quelltext kommentieren
<IRONIE>
33,33% -> 50% :kiss: </IRONIE> |
Re: Quelltext kommentieren
Zitat:
Zitat:
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</IRONIE&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:
Wobei in diesem Beispiel der Cast in TListBox sowieso unnötig ist - mal nebenbei bemerkt - aber es ging ja jetzt ums Prinzip :wink:
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; 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:
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:
// 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
Delphi-Quellcode:
So... das mal so als Anregung :wink:
// 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]! (<-- 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; |
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
|
Re: Quelltext kommentieren
Zitat:
Endlich einer, der auf der selben Wellenlänge schwimmt wie ich. :hello: :hi: |
Re: Quelltext kommentieren
Hallo s-off, Hallo Phoenix,
Zitat:
jkr |
Re: Quelltext kommentieren
Hallo Jürgen,
was möchtest Du mir jetzt mitteilen? Zitat:
Zitat:
Zitat:
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. |
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:
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 |
Re: Quelltext kommentieren
Huhu,
ok, dann war das ein klassischer aneinandervorbeiredner und wir haben alle auf unsere Art recht :zwinker: |
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:40 Uhr. |
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