Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Formatierung langer Terme (https://www.delphipraxis.net/87510-formatierung-langer-terme.html)

Cöster 1. Mär 2007 16:56


Formatierung langer Terme
 
Hi!

Bei langen Termen mit vielen Klammern stellt sich mir immer wieder die Frage: Wo soll ich am besten Leerzeichen und Zeilenbrüche einbauen, damit der Code möglichst gut lesbar ist?

Hier mal ein Beispiel:

Delphi-Quellcode:
edtVx.Text := FloatToStr(Ord((Angle < 90) or (Angle > 270)) *
   Sqrt(Sqr(TotalSpeed) / (Sqr(Tan(DegToRad(Angle))) + 1)));
Ich hab damit schon viel damit rumprobiert, eine Möglichkeit wäre z.B. auch diese:

Delphi-Quellcode:
edtVx.Text := FloatToStr( Ord((Angle < 90) or (Angle > 270)) *
   Sqrt(
      Sqr(TotalSpeed) /
      ( Sqr(Tan(DegToRad(Angle))) + 1 )
   )
);
Wie würdet ihr diesen Befehl (oder allgemein solche Terme) formatieren?
Würdet ihr Sqr(Ausdruck) vll auch durch Ausdruck * Ausdruck ersetzen oder DegToRad(Angle) durch Angle * Pi / 180? Oder statt "Ord" ein paar if-Abfragen?
Ich hab bisher noch nichts gefunden, was mich überzeugt?

yankee 1. Mär 2007 17:27

Re: Formatierung langer Terme
 
Also wenn du unbedingt umbrechenn willst, dann am besten Konsquent.
Klammern würde ich so umbrechen, wie es in Delphi mit begin und end üblich ist:
Delphi-Quellcode:
edtVx.Text := FloatToStr
  (
    Ord((Angle < 90) or (Angle > 270)) *
     Sqrt
     (
        Sqr(TotalSpeed) /
       (
         Sqr(Tan(DegToRad(Angle))) + 1
       )
     )
  );
Genau wie bei Delphi's begin und end siehst du sofort jede öffnende und schliessende Klammer und du kannst eine fehlende Klammer sofort identifizieren.

EDIT: Mit Hilfe von Delphi's Klammerhervorhebung solltest du dann immer 2 Klammern, die auf einer Ebene stehen gleichzeitig hervorheben können. Wenn das nicht klappt wiesst du sofort, dass was falsch ist und kansnt anfangen die Unterteile auch noch in extra-Zeilen umzubrechen, bis du den Fehler hast...

alzaimar 1. Mär 2007 17:45

Re: Formatierung langer Terme
 
Das ist doch nicht übersichtlich...
Delphi-Quellcode:
edtVx.Text := FloatToStr( Ord((Angle < 90) or (Angle > 270)) *
   Sqrt(
      Sqr(TotalSpeed) /
      ( Sqr(Tan(DegToRad(Angle))) + 1 )
   )
);
So würde ich das übersichtlich gestalten.
Delphi-Quellcode:
...
Var
  Vx, Ts2, TanAngle2 : Double;
  Mult : Integer;

Begin
  Ts2 := Sqr (TotalSpeed);
  TanAngle2 := 1 + Sqr (Tan (DegToRad (Angle)));

  If (Angle < 90) or (Angle > 270) Then
    Mult := 1  // Wieso???
  else
    Mult := 0;

  vx := Mult *Sqrt(Ts2/TanAngle2);
  edtVx.Text := FloatToStr(vx);
...
(Falls das korrekt von mir entwirrt wurde :mrgreen: ).
Und richtig übersichtlich wird es, wenn du noch dazuschreibst, was das soll. Wie willst Du denn eigentlich bei deinem Stil Fehler finden?

Und denk jetzt nicht, das das ja total langsam wird.....

Cöster 1. Mär 2007 18:26

Re: Formatierung langer Terme
 
@yankee: Hm, dann gehn ja noch mehr Zeilen für einen Befehl drauf :|

Zitat:

Zitat von alzaimar
(Falls das korrekt von mir entwirrt wurde :mrgreen: ).

Joa, aber ich hab selbst nen Fehler in meinen Code gehauen :oops: Aus irgendeinem Grund dachte ich nämlich, dass Ord(False) = -1 wäre.

Zitat:

Zitat von alzaimar
Und denk jetzt nicht, das das ja total langsam wird.....

Wird von der Geschwindigkeit wohl gar keinen Unterschied machen, weil nach der Übersetzung in ASM ja sowieso jeder Befehl höchstens einen Operator enthält.

Zitat:

Zitat von alzaimar
Das ist doch nicht übersichtlich...

Ich hatte mir bei den Umbrechungen gedacht, dass der Zähler dann über dem Nenner steht. Aber ganz überzeugt war ich davon ja auch nicht.

Mein aktueller Favorit ist jetzt:

Delphi-Quellcode:
var
   vx: Extended;
begin
   {...}
   vx := Sqrt(     Sqr(TotalSpeed) / (Sqr(Tan(DegToRad(Angle))) + 1)    );
   if (Angle > 90) and (Angle < 270) then
      vx := -vx;
   edtVx.Text := FloatToStr(vx);
   {...}
Wenn ihr noch weitere Ideen habt, schreibt sie hier rein.

yankee 1. Mär 2007 19:05

Re: Formatierung langer Terme
 
Zitat:

Zitat von Cöster
@yankee: Hm, dann gehn ja noch mehr Zeilen für einen Befehl drauf :|

Stimmt, wenn du den Quelltext dann ausdruckst ist das eine enorme Waldverdingsung.

Ich aber solange du das Zeugs nur auf dem Bildschirm hast, solltest du mit den Zeilen nicht sparsam sein.
Ich kann den Drang wenige Zeilen zu verbrauchen zwar nachvollziehen (habe ich auch manchmal), aber begrünbar ist es eigentlich nicht. Nagut, macnhaml muss man elend viell scrollen.

Aber sonst mache die Kosntrukte eben nur so zum debuggen und schmeisse sie am Ende wieder in eine Zeile. So amche ich es meistens auch.

alzaimar 2. Mär 2007 06:51

Re: Formatierung langer Terme
 
@Cöster: Kann man so stehen lassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz