![]() |
Re: Mein Delphi-Style
Um bei Hansas Beispiel zu bleiben:
Zitat:
Dann wird er ein paar Sortierungen (Jahr - Ort - ka, sammle keine Briefmarken) ausprobieren und dann die wählen die ihm am Besten gefällt und diese dann mit der Zeit verfeinern. Der gute Stil muss sich also entwickeln und da ist es zwar hilfreich, dass mangelnde Formatierung angemahnt wird, aber ständig darauf herumzureiten stört imho die Entwicklung eines Stilbewusstseins. MfG, Bug |
Re: Mein Delphi-Style
Um vielleicht von der muss alles/muss nichts Diskussion weg zu kommen...
Man könnte ja eine Rangliste erstellen, welche Styleguides den Code deutlich lesbarer machen und welche dann nur noch marginal Verbesserungen bringen und evtl. weniger wichtig sind. Zumindest die wichtigen Punkte könnte man sich dann aneignen... Einrückung sehe ich mit am wichtigsten (wobei wohl wieder die Sache mit begin ungeklärt bleiben wird) ;) |
Re: Mein Delphi-Style
..da auch mal meinen Senf dazu geben moechte...
also ich finde, dass ja gewisse Tools..Castalia etc. auch in einer gewissen Form "markieren"..die sieht , nicht nur weil es meiner entspricht, auch sehr uebersichtlich aus und ich denke mal, dass die Firma sicher auch gewisse Standards genutzt hat um sie in dieser Art zu visualisieren. ;-) |
Re: Mein Delphi-Style
Zitat:
Delphi-Quellcode:
Grüße,
procedure TFtpBrowser.DeleteFile(AFile: String; IsDir: Boolean);
const strRemoveFileError = 'Could not remove %s %s'; var strErrorMessage: string; begin try if (IsDir) then if ((AFile <> '.') and (AFile <> '..')) then Deletefile(..); else Deletefile(..); except if (IsDir) then strErrorMessage := Format(strRemoveFileError, ['directory', AFile]) else strErrorMessage := Format(strRemoveFileError, ['file', AFile]); TriggerLogEvent(strErrorMessage, etError); end; end; Win32 |
Re: Mein Delphi-Style
Das wird Delphi aber nicht kompilieren ("; nicht erlaubt vor einem else") ;)
|
Re: Mein Delphi-Style
War ja auch nur schnell zusammen getippt, hier gehts ja schließlich ums Prinzip :cheer:
|
Re: Mein Delphi-Style
Also bei mir würde der Beispiel-Code so aussehen:
Delphi-Quellcode:
und eine Procedure/Function muss nicht unbedingt auf eine Bildschirmseite passen.
if k=kMax then
A[k] := A[k-1] / A[k] if a=0 then Result := 0 else if a>0 then Result := 1 else Result := -1; if Sender=mnPrintGraphOben then h:= ro // 'Drucken|Graph oben' else h:= rm; // 'Drucken|Graph unten' for k:= 0 to kMax do A[k]:= 0; for i := 1 to iMax do begin temp := A[i]; A[i] := B[i]; B[i]:= temp; end; for i:= 2 to m do begin for k:= 1 to i-1 do B[i]:= B[i] - A[r(i,k)] * B[k]; B[i]:= B[i] / Abs(A[r(i,i)]) end; with Image1.Canvas do begin MoveTo(DL, D0 - Round(sy * (F(xMin)-yMin))); for i:= 0 to 320 do begin x:= xMin + i * dx; LineTo(DL + 2 * i, D0 - Round(sy * (F(x)-yMin))) end; end; Das wichtigste ist, dass man es lesen und verstehen kann. Sprich, wenn man scrollen muss, dann darf es nicht sein, dass man alle paar Zeilen zurück zu den Deklarationen der Variablen springen muss um sich zu errinnern, was DL, D0, ro oder rm nochmal bedeutet. Wenn ich Code sehe (meiner oder auch anderer Herkunft), dann möchte ich schon direkt (vor allem nach längerer Nichtbetrachtung) sofort sehen was dort "fabriziert" wurde und was es bedeutet. Beispiel (Nodes mit Farbverlauf im VST zeichnen):
Delphi-Quellcode:
Ich habe die Kommentare mal entfernt, aber ich denke, dass der Code relativ einfach zu vertstehen ist.
if (Node = vstMainList.HotNode) then
begin TargetCanvas.Pen.Color := $00FAF0D8; //$0049CFF5; cl1 := $00FDFAF4; cl2 := $00FDF5E8; end; if (Node = vstMainList.FocusedNode) then begin TargetCanvas.Pen.Color := $00FDDE99; //$000C66D3; cl1 := $00FDF8F1; cl2 := $00FCEFD5; end; if ((vstMainList.HotNode = vstMainList.FocusedNode) and (Node = vstMainList.HotNode)) then begin TargetCanvas.Pen.Color := $00FDDE99; //$0049CFF5; cl1 := $00FEF7E9; cl2 := $00F6E4C0; end; .... .... .... if (Column = 0) or (Column = vstMainList.Header.Columns.Count - 1) then begin rcTemp := CellRect; dec(rcTemp.Bottom, 1); if (Column = 0) then rcTemp.Left := rcTemp.Right - 4; if (Column = vstMainList.Header.Columns.Count - 1) then rcTemp.Right := rcTemp.Left + 4; if (vstMainList.Selected[Node]) or (Node = vstMainList.HotNode) then eqComps.DrawGradient(TargetCanvas, rcTemp, False, [cl1, cl2]); end; Auch wenn es nur ein Auszug ist. Meine Variablennamen wähle ich eigentlich immer so, dass man aus ihnen Typ und Verwendungszweck erkennen kann. rcTemp im Beispiel wird mehrmals an unterschiedlicher Stelle benutzt und immer wieder mal neu belegt. pNodeDataUser und pNodeDataWorkplace im Folgenden lassen schon erkennen, dass es Node-Daten sind für Benutzer oder Arbeitsplätze auch ohne das dafür eine weitere Erläuterung notwendig wäre, abgesehen vom "wozu?".
Delphi-Quellcode:
Variablen sollten abgesehen davon nur am Deklarationsort einmal etwas genauer beschrieben werden.
if Node.Dummy = 98 then
begin pNodeDataUser := vstMainList.GetNodeData(Node); sTemp := GetWorkplaceNumberFromID(pNodeDataUser.lRefWorkplaceID); .... .... .... end; if Node.Dummy = 99 then begin pNodeDataWorkplace := vstMainList.GetNodeData(Node); .... .... .... end; Mitten im Code macht es wenig Sinn, es sei denn die Namen der Variablen sind Nichtssagend. Fazit für mich: Bis jetzt sind auch andere, die mit meinem Code etwas machen mussten gut und schnell (ohne große Erklärungen) damit zurechtgekommen. Und das ist die Hauptsache. |
Re: Mein Delphi-Style
Zitat:
|
Re: Mein Delphi-Style
Zitat:
Ich hätte da noch eine Idee, wie man einrücken kann: 1. Man nehme die aktuelle Uhrzeit mit Sekundenanzeige 2. Rechne Sekunden modulo 8 3. Das Erbegbnis ist die Anzahl der Leerzeichen die man zum einrücken der aktuellen Zeile benutzt. Solchen Code gibt es wirklich. |
Re: Mein Delphi-Style
Zitat:
Im anderen Fall wäre es 3 leerzeichen weiter eingerückt + "begin" in der Zeile nach dem "then". |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:10 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