Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Formatierung


FinnO - So 24.05.09 20:00
Titel: Formatierung
Wie ist dieser Code richtig zu formatieren?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
      if PointInRect(Point(X,Y),
                     Rect(width div 2-200,
                          height div 2-75,
                          width div 2 + 200,
                          height div 2 + 75) ) then
      begin
      ...
      end;


(von der Anfangseinrückung mal abgesehen, ist reinkopiert ;))


jaenicke - So 24.05.09 20:12

Was heißt richtig? Ich würde es so machen:

Delphi-Quelltext
1:
2:
3:
4:
5:
      if PointInRect(Point(X, Y), Rect(Width div 2 - 200, Height div 2 - 75,
          Width div 2 + 200, Height div 2 + 75)) then
      begin
      ...
      end;
Ich überblicke es so am schnellsten und es ist nicht so ausgebreitet. Ich glaube so sollte es auch nach dem Styleguide passen:
http://dn.codegear.com/article/10280 (englisch)
http://www.delphi-treff.de/delphi-styleguide/ (deutsch)


API - So 24.05.09 20:13


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  if PointInRect(Point(X, Y),
    Rect(Width div 2 - 200,
    Height div 2 - 75,
    Width div 2 + 200,
    Height div 2 + 75)) then
  begin
  ...
  end;


ODER


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  if PointInRect(Point(X, Y), Rect(Width div 2 - 200,
    Height div 2 - 75, Width div 2 + 200,
    Height div 2 + 75)) then
  begin
  ...
  end;


jaenicke - So 24.05.09 20:14

Beides finde ich nicht so gut, wenn, dann würde ich beim ersten eins weiter einrücken nach dem Rect, denn das gehört ja da hinein.

Beim zweiten sind ausgerechnet x- und y-Richtung getrennt (bzw. die nicht zusammenhängenden in einer Zeile). ;-)


BenBE - Mo 25.05.09 11:36

Also mein Favorit ist das hier:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  if PointInRect(
    Point(X, Y),
    Rect(
      Width div 2 - 200, Height div 2 - 75,
      Width div 2 + 200, Height div 2 + 75
      )
    ) then
  begin
  ...
  end;


Siehe Econos Coding Standard. Grundregeln nach denen ich dabei (abweichend vom Econos Standard) gehe sind grob folgende (nicht vollständig):
- Sinngemäße Gliederung
- Überschaubare Informationshäppchen
- Keine Mischung von Formatierungen (wenn ich Argumente auf einer Zeile gruppiere, dann entweder alle, oder alle einzeln)
- Semantische Tiefen-Gliederung: Bei Unter-Aufrufen erfolgt eine Unter-Gruppierungsebene, sofern nötig
- Ausnahmen bestätigen diese Regeln ;-)

Edit: OT: Auf wie viele Varianten wir es wohl schaffen werden?


FinnO - Mo 25.05.09 12:50

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Also mein Favorit ist das hier:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  if PointInRect(
    Point(X, Y),
    Rect(
      Width div 2 - 200, Height div 2 - 75,
      Width div 2 + 200, Height div 2 + 75
      )
    ) then
  begin
  ...
  end;




warum denn dann nicht wenigstens so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
 
  if PointInRect(
                 Point(X, Y),
                 Rect(
                      Width div 2 - 200, Height div 2 - 75,
                      Width div 2 + 200, Height div 2 + 75
                     )
                ) then
  begin
  ...
  end;


frei nach C/C++?


jaenicke - Mo 25.05.09 12:52

Das zieht den Code aber extrem in die Breite, das ist auch nicht so schön finde ich.


BenBE - Mo 25.05.09 13:13

Jep, genau deshalb: Weil der Code damit unnötig in die Breite gezogen wird. Bei der Einrückung mit den Klammern\Parametern geht es darum, die Zugehöörigkeit der Parameter anzuzeigen, nicht die einzelnen Klammern herauszuheben; die sind Beiwerk. Wichtiger ist es, dass der Code eine Gliederung bekommt.

Man kann IOCCC-Code schreiben, oder aber sich bemühen, mit Struktur und Übersicht eine Gliederung zu schaffen. Wenn man dazu horizontal scrollen muss, läuft etwas falsch.


Aya - Mo 25.05.09 13:18


Delphi-Quelltext
1:
2:
3:
if PointInRect(Point(X, Y), Rect(width div 2 - 200, height div 2 - 75, width div 2 + 200, height div 2 + 75)) then begin
  ...
end;


alles andere finde ich furchtbar unübersichtlich.. :shock:

Aya~


jaenicke - Mo 25.05.09 13:19

Alles in eine Zeile zu schreiben macht ggf. horizontales Scrollen notwendig. :shock:
Das macht einen Code unlesbar oder verhindert zumindest, dass man ihn schnell überblicken kann.

Bei mir jedenfalls ist das Codefenster auf etwa eine Breite von 100 Zeichen eingestellt. Alles was drüber geht muss gescrollt werden.


zuma - Mo 25.05.09 13:24

Ich finde die erste Variante von FinnO am übersichtlichsten (lediglich Leerzeichen bei -, genau wie bei +). Dort sieht man auf einen blick, welche Parameter wozu gehören bzw. wie sie berechnet werden.


Aya - Mo 25.05.09 13:24

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Alles in eine Zeile zu schreiben macht ggf. horizontales Scrollen notwendig. :shock:
Das macht einen Code unlesbar oder verhindert zumindest, dass man ihn schnell überblicken kann.

Bei mir jedenfalls ist das Codefenster auf etwa eine Breite von 100 Zeichen eingestellt. Alles was drüber geht muss gescrollt werden.


Da ich öffters mal Fremdcode in die finger bekomme der auch so formatiert ist wie ihr das vorschlagt weiß ich - zumindest bei mir - aus erfahrung das ich da NICHTS erkenne.. da sitz ich immer ne gefühlte ewigkeit davor bis ich raushab was da wie zusammen gehört.. meist mach ich es mir dann einfach lösch alle zeilenumbrüche so das es in einer zeile steht ;)

Klar es ist gewohnheit, aber ich für meinen Teil habe solche Zeilen recht selten (nochdazu nen Widescreen Monitor ;) ) und wenn ich mal seitlich scrollen muß, was stört das schon? Für mich ist es so auf den ersten blick ersichtlich was wie wozu gehört..

Nochdazu finde ich es sehr unübersichtlich wo das if anfängt und wo dann das then dazu kommt. Wenn man das in nem text-editor ohne Syntax-Highlighting anschaut sucht man da erstmal in den Zeilen das then.

Aya~


BenBE - Mo 25.05.09 13:24

@Aya: Dann aber bitte schön schon das Begin nach dem Then auf eine eigene Zeile ... Das erhöht die Übersicht ;-)

Hinweis für Allergiker: Dieser Beitrag könnte Spuren von Ironie oder Sarkasmus enthalten, die bei sensiblen Gemütern zu allergischen Reaktionen führen könnten.


Aya - Mo 25.05.09 13:27

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
@Aya: Dann aber bitte schön schon das Begin nach dem Then auf eine eigene Zeile ... Das erhöht die Übersicht ;-)


Finde ich auch nicht ;)

a) Ist das eine zeile unnötig verschwendet.

b) Wozu..? :p Es ist doch offensichtlich das dannach ein begin steht wenn der nachfolgende code eingerückt ist..

Wenn jetzt jemand kommt vonwegen "Jaaa, aber wenn man das begin dann wegmacht und vergisst das einrücken anzupassen bla".. sag ich nur - "Passiert mir NIE" ;)


Aber auch hier.. jeder wie er es gewohnt ist. (Ich schreibe auch bei C++ die geschweifte klammer direkt in die zeile vom If.. ich finde es furchtbar sonst xD )

Aya~


Yogu - Mo 25.05.09 13:39

user profile iconAya hat folgendes geschrieben Zum zitierten Posting springen:
Ich schreibe auch bei C++ die geschweifte klammer direkt in die zeile vom If.. ich finde es furchtbar sonst xD

Geschweifte Klammern kommen bei mir auch immer in die gleiche Zeile. Aber das Delphi-begin ist mir dafür einfach zu lang.

In Delphi sieht Code bei mir immer so aus:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
4:
5:
      if PointInRect(Point(X, Y), Rect(Width div 2 - 200, Height div 2 - 75,
          Width div 2 + 200, Height div 2 + 75)) then
      begin
      ...
      end;

Wobei nach 80 Zeichen ein rechter Rand eingeblendet ist, den ich auch nie überschreite. So habe ich bei meinem 22"Breitbild richtig schön viel Platz für Werkzeugfenster und außerdem ist 80 Zeichen eine Art "genormter" Rand, den man auch sonst oft findet. Dann passt das schön. Und arg unübersichtlich ist das gar nicht, user profile iconAya ;)


baka0815 - Mo 25.05.09 13:40

Ich finde es im Falle Delphi übersichtlicher

Delphi-Quelltext
1:
2:
3:
4:
if (...) then
begin
  ...
end;


Was Java angeht, schreibe ich jedoch auch lieber

C#-Quelltext
1:
2:
3:
if (...) {
  ...
}

da ich die einzelne Klammer (was bei C# scheinbar Standard ist) furchtbar finde.

Da man bei Delphi das begin ... end nicht so schön "zusammenhängend" markieren kann wie die Klammern in Java (Eclipse), finde ich das mit der Extra-Zeile übersichtlicher.

user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
[...] und außerdem ist 80 Zeichen eine Art "genormter" Rand, den man auch sonst oft findet

Das liegt daran, weil das Standard DOS-Fenster 80 Zeichen breit ist und ein Drucker im Textmodus auch eine Breite von 80 Zeichen hat, bevor umgebrochen werden muss.


jaenicke - Mo 25.05.09 13:44

user profile iconAya hat folgendes geschrieben Zum zitierten Posting springen:
"Passiert mir NIE" ;)
Ich schreibe den Code normalerweise zur Veröffentlichung oder Verwendung durch andere, da kann ich so ja nicht argumentieren.

user profile iconAya hat folgendes geschrieben Zum zitierten Posting springen:
nochdazu nen Widescreen Monitor ;)
Ich auch, aber den nutze ich auch aus. Siehe hier oder Anhang: :D

[url=http://www.sj-berlin.de/service/df/screenshots/BDS2006_Desktop.png]user defined image[/url]


Yogu - Mo 25.05.09 13:44

user profile iconbaka0815 hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
[...] und außerdem ist 80 Zeichen eine Art "genormter" Rand, den man auch sonst oft findet

Das liegt daran, weil das Standard DOS-Fenster 80 Zeichen breit ist und ein Drucker im Textmodus auch eine Breite von 80 Zeichen hat, bevor umgebrochen werden muss.

Ah, man lernt nie aus :think:


jaenicke - Mo 25.05.09 13:46

user profile iconbaka0815 hat folgendes geschrieben Zum zitierten Posting springen:
Da man bei Delphi das begin ... end nicht so schön "zusammenhängend" markieren kann wie die Klammern in Java (Eclipse), finde ich das mit der Extra-Zeile übersichtlicher.
Das geht ja mit CnWizards z.B., da wird das (siehe Screenshot) auch visuell verdeutlicht, aber trotzdem schreibe ich es in die gleiche Ebene.


baka0815 - Mo 25.05.09 13:47

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconbaka0815 hat folgendes geschrieben Zum zitierten Posting springen:
Da man bei Delphi das begin ... end nicht so schön "zusammenhängend" markieren kann wie die Klammern in Java (Eclipse), finde ich das mit der Extra-Zeile übersichtlicher.
Das geht ja mit CnWizards z.B., da wird das (siehe Screenshot) auch visuell verdeutlicht, aber trotzdem schreibe ich es in die gleiche Ebene.

Danke!
Wollte dich eh gerade fragen, wie du das so schön farblich angezeigt kriegst. ;)


Tilo - Mo 25.05.09 16:39

Ich steuer dann auch mal eine Variante bei.
Basis ist folgendes:
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Also mein Favorit ist das hier:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  if PointInRect(
    Point(X, Y),
    Rect(
      Width div 2 - 200, Height div 2 - 75,
      Width div 2 + 200, Height div 2 + 75
      )
    ) then
  begin
  ...
  end;



daraus wird:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  
 if PointInRect( Point(X, Y),
                 Rect( Width div 2 - 200, Height div 2 - 75,
                       Width div 2 + 200, Height div 2 + 75 )  
               ) then
 begin
   ...
 end;


Ich spare lieber etwas Zeilen.
Leider geht das in Delphi nicht so gut wie z.B. in Java.