AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Neuer Artikel auf meiner HP: "Code-Design"

Neuer Artikel auf meiner HP: "Code-Design"

Ein Tutorial von Luckie · begonnen am 25. Mai 2004 · letzter Beitrag vom 15. Mai 2018
Antwort Antwort
Seite 4 von 5   « Erste     234 5   
Benutzerbild von Luckie
Luckie
Registriert seit: 29. Mai 2002
Ja eigentlich sollte es ein Tutorial werden, aber da bin ich einfach nicht mit zu Potte gekommen, ergo habe ich es kurzer Hand als Artikel veröffentlicht.

Link: CodeDesign

[edit=Matze]Link aktualisiert. MfG, Matze[/edit]
Ein Teil meines Codes würde euch verunsichern.
 
BKempf

 
Delphi 6 Enterprise
 
#31
  Alt 5. Jun 2004, 08:24
Wenn ich ein "end" sehe, suche ich dazu automatisch das "begin".
Ich habe mal eine Weile mit

Delphi-Quellcode:
if eins then begin
  foo;
end else if zwei then begin
  bar;
end else begin
  blubb;
end;
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.


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:
// (Die Unterstriche bitte einfach mal wegdenken)
if eins then
begin
  foo;
end
_else
if zwei then
begin
  bar;
end
_else
begin
  blubb;
end;
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.
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

 
Turbo Delphi für Win32
 
#32
  Alt 5. Jun 2004, 10:16
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:
if eins then
begin
  foo;
end
else
if zwei then
begin
  bar;
end
else
begin
  blubb;
end;
Ich selbst bevorzuge aber so einen etas anderen Stil. Finde ich um einiges kompakter.

Delphi-Quellcode:
if eins then
  foo
else if zwei then
  bar
else
  blubb;
Günter
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

 
Delphi 2009 Professional
 
#33
  Alt 5. Jun 2004, 10:39
Ich bevorzuge den Style von BKempf:

Delphi-Quellcode:
if a = b then
begin
  blubb;
end
else
begin
  >(((°>;
end;
if b = c then
begin
  ...;
end
else
begin
  ..;
end;
[edit=Sharky]Delphi-Abschluss-Tag gesetzt Mfg, Sharky[/edit]
Manuel
  Mit Zitat antworten Zitat
BKempf

 
Delphi 6 Enterprise
 
#34
  Alt 6. Jun 2004, 18:55
Zitat von GuenterS:
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:
if eins then
begin
  foo;
end
 else
if zwei then
begin
  bar;
end
 else
begin
  blubb;
end;

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 von GuenterS:
Ich selbst bevorzuge aber so einen etas anderen Stil. Finde ich um einiges kompakter.

Delphi-Quellcode:
if eins then
  foo
else if zwei then
  bar
else
  blubb;
Den verwende ich nicht, weil dabei die Bedingungen nicht genau untereinander stehen. Abgesehen davon schreibe ich ja fast immer komplette begin..end-Bloecke, auch da, wo nur eine Anweisung bedingt ausgefuehrt werden soll.
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

 
Turbo Delphi für Win32
 
#35
  Alt 6. Jun 2004, 18:58
Zitat von BKempf:
Zitat von GuenterS:
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:
if eins then
begin
  foo;
end
 else
if zwei then
begin
  bar;
end
 else
begin
  blubb;
end;

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 von GuenterS:
Ich selbst bevorzuge aber so einen etas anderen Stil. Finde ich um einiges kompakter.

Delphi-Quellcode:
if eins then
  foo
else if zwei then
  bar
else
  blubb;
Den verwende ich nicht, weil dabei die Bedingungen nicht genau untereinander stehen. Abgesehen davon schreibe ich ja fast immer komplette begin..end-Bloecke, auch da, wo nur eine Anweisung bedingt ausgefuehrt werden soll.
Achso hast Du das gemeint, naja dann find ich Deinen Stil für mich selbst eben noch ungünstiger weil ich dann erst nach dem zugehörigen else suchen muss und es zudem ja auch nicht dem Borland Stil entspricht. Aber jeder wie er glaubt.
Günter
  Mit Zitat antworten Zitat
BKempf

 
Delphi 6 Enterprise
 
#36
  Alt 6. Jun 2004, 19:06
Zitat von GuenterS:
Achso hast Du das gemeint, naja dann find ich Deinen Stil für mich selbst eben noch ungünstiger weil ich dann erst nach dem zugehörigen else suchen muss und es zudem ja auch nicht dem Borland Stil entspricht. Aber jeder wie er glaubt.
Fuer mich ist das optimal .
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).
  Mit Zitat antworten Zitat
mimi

 
FreePascal / Lazarus
 
#37
  Alt 20. Jul 2004, 20:34
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:
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;
ich finde so einen code viel übersichtlich als, wenn man z.b.
Code:
for i:=0 to high(ki) do
begin
...
end;
schreiben würde
Michael Springwald
  Mit Zitat antworten Zitat
MathiasSimmack
 
#38
  Alt 20. Jul 2004, 20:50
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:
if(irgendwas) then
begin
  irgendwas_anderes;
end;
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.
  Mit Zitat antworten Zitat
mimi

 
FreePascal / Lazarus
 
#39
  Alt 20. Jul 2004, 20:53
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*
Michael Springwald
  Mit Zitat antworten Zitat
MathiasSimmack
 
#40
  Alt 20. Jul 2004, 21:01
Das sehe ich zwar anders, aber wenn es dir egal ist, warum fragst du dann überhaupt?
  Mit Zitat antworten Zitat
Themen-Optionen Tutorial durchsuchen
Tutorial durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf