![]() |
Re: Neuer Artikel auf meiner HP: "Code-Design"
Wenn ich ein "end" sehe, suche ich dazu automatisch das "begin".
Ich habe mal eine Weile mit
Delphi-Quellcode:
und aehnlichen Dingern experimentiert. Das ist fuerchterlich schiefgegangen, weil ich meine Bloecke nicht durch Draufsehen erkennen konnte, sondern immer das Ende der Zeile suchen musste. So etwas zu debuggen hat ewig gedauert.
if eins then begin
foo; end else if zwei then begin bar; end else begin blubb; end; Mein persoenlicher Styleguide sagt jetzt: - Nach einem then folgt immer ein begin/end-Block. Ausnahmen, wenn ueberhaupt, nur zum Debuggen und dann mit (**) gekennzeichnet (das ist mein Zeichen fuer Baustellen, da ich als echte Kommentare nur die beiden anderen Typen verwende). - Auch vor einem "end" steht ein Semikolon, ob ueberfluessig oder nicht. Es koennten ja noch Anweisungen hinzugefuegt werden, und dann ist dafuer schon alles vorbereitet :-). Sieht ausserdem einheitlicher aus. - "begin" und "end" ("case xy of" und das dazugehoerige "end", "record"/"end", ...) beginnen grundsaetzlich auf einer Spaltenebene, die vom IDE-Editor mit einer ungeraden Zahl bedacht wurde. - "else" steht auf geraden Ebenen. Das trennt mehrere aufeinanderfolgende begin..end-Bloecke optisch ein wenig. - Bei mehreren if-Abfragen (quasi "case of" mit komplexeren Abfragen, die ein einfaches echtes "Case of" verhindern, etwa Stringueberpruefungen) stehen alle "if" in derselben Spalte.
Delphi-Quellcode:
Das ist zwar nicht so schoen kompakt wie andere Varianten, aber ich finds uebersichtlicher und das faellt ohnehin nicht sehr ins Gewicht, weil ich grosszuegig Leerzeilen einstreue.
// (Die Unterstriche bitte einfach mal wegdenken)
if eins then begin foo; end _else if zwei then begin bar; end _else begin blubb; end; |
Re: Neuer Artikel auf meiner HP: "Code-Design"
Ich habe die Unterstriche mal weggemacht, dann sieht man gleich besser wie Du es gemeint hast. Frag mich wieso hast Du sie überhaupt dazu gegeben?
Delphi-Quellcode:
Ich selbst bevorzuge aber so einen etas anderen Stil. Finde ich um einiges kompakter.
if eins then
begin foo; end else if zwei then begin bar; end else begin blubb; end;
Delphi-Quellcode:
if eins then
foo else if zwei then bar else blubb; |
Re: Neuer Artikel auf meiner HP: "Code-Design"
Ich bevorzuge den Style von BKempf:
Delphi-Quellcode:
[edit=Sharky]Delphi-Abschluss-Tag gesetzt ;-) Mfg, Sharky[/edit]
if a = b then
begin blubb; end else begin >(((°>; end; if b = c then begin ...; end else begin ..; end; |
Re: Neuer Artikel auf meiner HP: "Code-Design"
Zitat:
Ich habe mich unklar ausgedrueckt. Die Unterstriche sollten zwar weg, aber der Platz sollte stattdessen von je einem Leerzeichen besetzt werden, d.h. die else-Anweisungen sollten um 1 eingerueckt bleiben :-). Irgendwie hatte ich den Eindruck, als wuerden einzelne Leerzeichen auf dem Weg vom Browser ins Forum abhanden kommen ;-), jedenfalls waren die Einrueckungen in der Vorschau auf wundersame Weise verschwunden. Da habe ich mit halt mit Unterstrichen geholfen. Zitat:
|
Re: Neuer Artikel auf meiner HP: "Code-Design"
Zitat:
|
Re: Neuer Artikel auf meiner HP: "Code-Design"
Zitat:
Abgesehen davon, dass ich die elses selten suche (und wenn, dann halt nur zwischen den eigentlichen Hauptebenen suchen muss), sind mir von der Struktur her die begin...end-Bloecke wichtiger, da sie haeufiger vorkommen (und auch, weil diese Strategie problemlos auf aehnliche Strukturen wie record...end, repeat...until etc. uebertragbar ist). |
Re: Neuer Artikel auf meiner HP: "Code-Design"
was haltet ihr von diesem code(es ist aus meinem pac-man clone und ist in einer extern unit in einer eigenen klassse ausgelagert und die komponenten(DXDraw, DXTimer, DXListImage werden zurlaufzeit erstellt)
Code:
ich finde so einen code viel übersichtlich als, wenn man z.b.
procedure TPACMan.DXDraw1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var i,index:Integer; k:array of TKI; begin if ssLeft in Shift then begin if (x div mapS <= MapX) and (y div mapS <= MapY) then begin if NTyp = isStein then CreateItems((x div MapS),(y div MapS),nTyp,ntex); if NTyp = isKi then CreateKI( (x div mapS),(y div mapS),0,0,random(6)+3 ); if NTYp = isPlayer then begin Player.x:=x div mapS; Player.y:=y div mapS; end; end; end; if ssRight in Shift then begin if NTYp = isStein then begin Map[x div MapS,y div MapS].Typ:=None; Map[x div MapS,y div MapS].Tex:=0; end; if NTYp = isKI then begin index:=0; for i:=0 to HIGH(ki) do begin if (ki[i].x = x div mapX) and (ki[i].y = y div mapY) then begin index:=i; break; end; end; for i:=0 to HIGH(KI) do begin if i <> index then begin SetLength(k,high(k)+2); k[HIGH(K)]:=ki[i]; end; end; SetLength(ki,0); SetLength(ki,high(k)); for i:=0 to HIGH(KI) do begin ki[i]:=k[i]; end; end; end; end;
Code:
schreiben würde
for i:=0 to high(ki) do
begin ... end; |
Re: Neuer Artikel auf meiner HP: "Code-Design"
Das habe ich auch mal gedacht, aber letztlich kommt es auf´s selbe raus. Ich meine, das "if" leitet die untergeordnete Ebene im Prinzip ja ein, da spielt´s dann auch keine Rolle mehr, das "begin" auf die gleiche Höhe zu setzen. Dem Compiler macht das nichts aus; will sagen: das Ergebnis ist das gleiche.
Soll heißen: Ich bevorzuge mittlerweile dann doch den Stil
Delphi-Quellcode:
Speziell auch wenn es um sehr lange Zeilen geht, mache ich lieber in der nächsten Zeile weiter als den rechten Rand im Editor zu überschreiten. Das mag den Code optisch verlängern (weil man mehr scrollen muss), aber andere Nebenwirkungen hat es nicht.
if(irgendwas) then
begin irgendwas_anderes; end; |
Re: Neuer Artikel auf meiner HP: "Code-Design"
wenn ich z.b. mehre blöcke hintereinander habe die mit begin anfangen und end aufhören komme ich immer ducheinander, wenn das begin nicht auf der gleichen zeile steht wie der block *G*
naja, es ja auch egal *G* |
Re: Neuer Artikel auf meiner HP: "Code-Design"
Das sehe ich zwar anders, aber wenn es dir egal ist, warum fragst du dann überhaupt?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:09 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