AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Die "richtige" Sourcecode Formatierung?

Ein Thema von Mavarik · begonnen am 8. Aug 2016 · letzter Beitrag vom 13. Aug 2016
Antwort Antwort
Seite 1 von 2  1 2      
nahpets
(Gast)

n/a Beiträge
 
#1

AW: Die "richtige" Sourcecode Formatierung?

  Alt 9. Aug 2016, 19:32
Ok, dann auch mal mein Senf dazu:
Delphi-Quellcode:
// Folgt auf ein If nur eine Anweisung, dann wird das ein Einzeiler, solange er nicht über ca. 80 Zeichen hinaus geht.
if ... then ...;
// Geht vorhergenanntes über ca. 80 Zeichen hinaus, dann wird es:
if ... then begin
  ...
end;
// Sind es mehr als eine Anweisung wird es analog dazu:
if ... then begin
  ...
  ...
end;
Das end ist immer genauso weit eingerückt, wie das dazugehörige if.
Folgen auf ein if mehrere Anweisungen, werden die eingerückt.
Durch die Einrückung erkenne ich, dass da was zusammen gehört. Das begin am Ende der If-Anweisung ist für mich daher eine Redundanz und hat keinerlei Informationswert für das Verstehen des Quelltextes. Daher brauchts dafür keine eigene Zeile und kann von mir aus auch rechts neben dem Bildschirm stehen
Das gilt analog auch für for, while, repeat ...

Wenn's um Alternativen beim if geht, sieht es so aus:
Delphi-Quellcode:
if ...
and ...
and ... then begin
  ...
end else
if ... then begin
  ...
  ...
end else
if ...
or ... then
begin
  ...
end else
// Das sieht hier im Forum etwas anders aus, als im wirklichen Leben, da die Leerzeichen hier nicht die gleiche Breite haben, wie die Buchstaben und Zahlen und zum Teil "geklaut" werden.
// Schrifttyp im Quelltexteditor ist immer Courier New.
if (x = y)
and ( (a = b)
     or (e = f)
    ) then begin
end;
Und da ich ein "alter Sack" bin, hab' ich schonmal was von der ungarischen Notation gehört. Da halte ich mich dran, soweit es verständlich ist. Dadurch brauche ich für die Unterscheidung von Funktionen und Variabeln auch kein Foo()-Konstrukt.

Variabeln fangen immer mit 'nem Kleinbuchstaben an, Funktionen und Prozeduren mit 'nem Großbuchstaben.
Besteht ein Funktions-/Prozedurname aus 'ner Beschreibung der Aufgabe, so beginnt in dem Namen jedes neue Wort mit 'nem Großbuchstaben. Z. B.: SeiteLaden, DatenSpeichern ...

Konstanten werden wie Variabeln benannt, bekommen aber noch ein c davor. z. B.: csConnectionString.
Damit weiß ich im Quelltext immer: das ist 'ne Konstante und zwar eine Zeichenfolge und sie enthalt die Verbindungszeichenfolge für 'ne Datenbankverbindung.
Resourcestrings beginnen mit rs.

Hab' ich z. B. eine Stringliste, die Referenzen aus einer HTML-Seite enthält, dann heißt sie slAHRef. Muss ich nun (was bei Stringlisten ja häufiger vorkommt) per For-Schleife darüber laufen, so bekommt die entsprechend Variabel den Namen iAHRef.

Sieht dann so aus (PascalScript, daher ein bisserl anders als Delphi):
Delphi-Quellcode:
function SeiteLaden(sSeite : String) : Boolean;
var
// Die Doppelpunkte stehen untereinander,
// dadurch ist eine Sortierung im Editor nach Typ oder Name einfacher.
        slAHRef : TStringList;
        slHTML : TStringList;
        sUrl : String;
        sMessage : String;
        sTitel : String;
        iAHref : Integer;
        iIndex : Integer;
        iID : Integer;
begin
  Status(Format('Seite %s wird geladen ...', [sSeite]));
  iID := qry.FieldByName('ID').AsInteger;
  AppTitle(Format('%d - %d',[iID,iMaxID]),'Textverwaltung');
  slAHRef := TStringList.Create;
  slHTML := TStringList.Create;
  try
    sTitel := '<unbekannt>';
    sUrl := Format('%s%s',[csRoot, sSeite]);
    Result := HTTPGet(sUrl, slHTML, slAHRef, sMessage, 5);
    ProcessMessages;
    if not Result then begin
      sUrl := Format('%s%s%s',[csRoot, csPrograms, sSeite]);
      Result := HTTPGet(sUrl, slHTML, slAHRef, sMessage, 5);
      ProcessMessages;
    end;
    if Result then begin
      iIndex := slHTML.IndexOf('<title>');
      if (iIndex > 0) and (iIndex < slHTML.Count - 1) then sTitel := slHTML[iIndex + 1];
      if not qry.Locate('seite', sSeite, [loCaseInsensitive, loPartialKey]) then begin
        Inc(iMaxID);
        qry.Append;
        qry.FieldByName('ID').AsInteger := iMaxID;
      end else begin
        qry.Edit;
      end;
      qry.FieldByName('Seite').AsString := sSeite;
      qry.FieldByName('Titel').AsString := sTitel;
      qry.FieldByName('Schluesselwort').AsString := sTitel;
      qry.FieldByName('Classname').AsString := csAutor;
      qry.FieldByName('Parent').AsString := csParent;
      qry.FieldByName('SeitenText').AsString := slHTML.Text;
      qry.FieldByName('Teile').AsString := '';
      try
        qry.Post;
      except
        AppLog('SeiteLaden (1)', Format('%s', [sSeite]));
        AppLog('SeiteLaden (1)', ExceptionParam);
        AppTitle(Format('Fehler bei Seite %s', [sSeite]), 'Textverwaltung');
        qry.Cancel;
      end;
      for iAHref := slAHRef.Count - 1 downto 0 do begin
        if (Pos(':', slAHRef[iAHref]) <> 0) then slAHRef.Delete(iAHref);
      end;
      for iAHref := slAHRef.Count - 1 downto 0 do begin
        if (Pos('../', slAHRef[iAHref]) = 1) then slAHRef[i] := AnsiReplaceText(slAHRef[iAHref], '../', '');
      end;
      for iAHref := slAHRef.Count - 1 downto 0 do begin
        if (Pos('.htm', slAHRef[iAHref]) = 0) then slAHRef.Delete(iAHref);
      end;
      for iAHref := slAHRef.Count - 1 downto 0 do begin
        iIndex := Pos('#', slAHRef[iAHref]);
        if iIndex > 0 then slAHRef[iAHref] := Copy(slAHRef[iAHref], 1, iIndex - 1);
      end;
      slAHRef.Sort;
      for iAHref := slAHRef.Count - 1 downto 1 do begin
        if slAHRef[iAHref] = slAHRef[iAHRef - 1] then slAHRef.Delete(iAHref);
      end;
      for iAHref := 0 to slAHRef.Count - 1 do begin
        if not qry.Locate('Seite',slAHRef[iAHref],[loCaseInsensitive]) then begin
          Inc(iMaxID);
          qry.Append;
          qry.FieldByName('ID').AsInteger := iMaxID;
          qry.FieldByName('Seite').AsString := slAHRef[iAHref];
          qry.FieldByName('Titel').AsString := '';
          qry.FieldByName('Schluesselwort').AsString := '<neu>';
          qry.FieldByName('Classname').AsString := csAutor;
          qry.FieldByName('Parent').AsString := csParent;
          try
            qry.Post;
          except
            AppLog('SeiteLaden (2)',Format('%s',[slAHRef[iAHref]]));
            AppLog('SeiteLaden (2)',ExceptionParam);
            AppTitle(Format('Fehler bei Seite %s',[slAHRef[iAHref]]),'Textverwaltung');
            qry.Cancel;
          end;
        end;
      end;
    end else begin
      Applog('SeiteLaden (3)', Format('%s',[sUrl]));
      Applog('SeiteLaden (3)', Format('%s',[sMessage]));
    end;
  except
    Applog('SeiteLaden (4)', Format('%s - Titel: %d - %s', [sSeite,iIndex,sTitel]));
    Applog('SeiteLaden (4)', ExceptionParam);
  end;
  slRef.Free;
  slHTML.Free;
  qry.Locate('ID',iID,[loCaseInsensitive]);
end;
Und das schöne daran ist: Niemand, außer mir, muss damit zurecht kommen, das lesbar oder schön finden, und von daher ist das Ganze eigentlich vollkommen irrelevant.

Wenn ich in 'nem Team arbeite, dann halte ich mich natürlich an die dort vorgegebenen Richtlinien, egal wie sch... die Quelltexte auch aussehen mögen, behalte mir aber vor, Quelltexte anderer, die sich nicht daran halten bzw. Quelltexte die auf irgendeine andere Art und Weise unleserlich und/oder unübersichtlich sind, entsprechend den Richtlinien anzupassen (jedenfalls dann, wenn der Quelltext so konfus ist, dass (im Test oder in der Produktion) festgestellte Fehler im Quelltext "dank Unleserlichkeit" nicht gefunden werden können).
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Die "richtige" Sourcecode Formatierung?

  Alt 10. Aug 2016, 07:50
Delphi-Quellcode:
// Folgt auf ein If nur eine Anweisung, dann wird das ein Einzeiler, solange er nicht über ca. 80 Zeichen hinaus geht.
if ... then ...;
Und wenn du mal einen Haltepunkt auf die Anweisung setzen willst, ärgerst du dich über diese Anordnung und verteilst es wieder auf 2 Zeilen - richtig?
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.663 Beiträge
 
Delphi 12 Athens
 
#3

AW: Die "richtige" Sourcecode Formatierung?

  Alt 10. Aug 2016, 08:46
Und wenn du mal einen Haltepunkt auf die Anweisung setzen willst, ärgerst du dich über diese Anordnung und verteilst es wieder auf 2 Zeilen - richtig?
Und deshalb bekommt der Befehl nach then eine eigene Zeile. Und weil man beim Zufügen weiterer Zeilen schnell mal das begin vergisst, werden auch solche Einzeiler in ein begin-end verpackt.

Aber auch hier gibt es wieder eine Ausnahme: if ... then Exit; bleibt auf einer Zeile, weil hier das Haltepunkt-Argument leider nicht zieht. Seitdem die IDE diese netten Flow-Icons anzeigt, ist das auch viel angenehmer und leichter zu lesen und lenkt nicht vom eigentlich relevanten Code ab.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Die "richtige" Sourcecode Formatierung?

  Alt 10. Aug 2016, 09:02
Wieso sollte ich auf ein Exit keinen Haltepunkt setzen können/wollen?
Vielleicht interessiert es mich ja, ob das Exit während der Codeausführung überhaupt mal angesprungen wird (ohne bei jeder Prüfung anzuhalten).
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.663 Beiträge
 
Delphi 12 Athens
 
#5

AW: Die "richtige" Sourcecode Formatierung?

  Alt 10. Aug 2016, 10:32
Wieso sollte ich auf ein Exit keinen Haltepunkt setzen können/wollen?
Vielleicht interessiert es mich ja, ob das Exit während der Codeausführung überhaupt mal angesprungen wird (ohne bei jeder Prüfung anzuhalten).
Schon mal probiert?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

AW: Die "richtige" Sourcecode Formatierung?

  Alt 10. Aug 2016, 10:41
Schon mal probiert?
Klar - aber initial natürlich nur mit

Delphi-Quellcode:
if 1=1 then
  Exit;
Um jetzt festzustellen, dass es nicht mehr klappt, wenn da irgend etwas sinnvolles steht - cooles Feature ~.~
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.663 Beiträge
 
Delphi 12 Athens
 
#7

AW: Die "richtige" Sourcecode Formatierung?

  Alt 10. Aug 2016, 11:06
Um jetzt festzustellen, dass es nicht mehr klappt, wenn da irgend etwas sinnvolles steht - cooles Feature ~.~
Der Compiler macht daraus einfach einen bedingten Sprung ans Ende der Methode. Es gibt also keinen Assembler-Befehl, wo dieses Exit wirklich ausgeführt wird und der Debugger davor anhalten könnte. Analog gilt das auch für Break und Continue.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

AW: Die "richtige" Sourcecode Formatierung?

  Alt 10. Aug 2016, 09:35
Delphi-Quellcode:
// Folgt auf ein If nur eine Anweisung, dann wird das ein Einzeiler, solange er nicht über ca. 80 Zeichen hinaus geht.
if ... then ...;
Und wenn du mal einen Haltepunkt auf die Anweisung setzen willst, ärgerst du dich über diese Anordnung und verteilst es wieder auf 2 Zeilen - richtig?
Das ich den Debugger benötige kommt so selten vor, dass ich damit leben kann. Und wenn, dann kommt der Haltepunkt auf die Zeile mit dem If, dann kann ich direkt sehen, was denn da so in den abzufragenden Variabeln der IF-Anweisung steht.

Den Debugger brauche ich fast nur, um bei einem Fehler, den ich nicht finde, die IDE beim Auftreten des Fehlers mir die Stelle zeigen zu lassen, an der der Fehler auftritt.

Keine Ahnung, was ich "falsch" mache, aber der Debugger ist bei mir das Teil, dass ich am wenigsten nutze

Eventuell liegt es auch daran, dass ich Programme immer mit Debuginfos und Map-Datei erstelle, die Fehlerbehandlung der Jedis nutze und von daher in der Fehlermeldung immer angezeigt bekomme, in welcher Unit und in welcher Quelltextzeile der Fehler aufgetreten ist. Daher brauche ich (kaum) mal den Debugger, um fündig zu werden.

Abgesehen davon sind die Kombination von If-Then-Befehl nur selten kürzer als ca. 80 Zeichen und ich schrieb ja, dass ich bei "langen" If-Anweisungen ein Begin-End folgen lasse und somit der Dreizeiler der Normalfall ist.
  Mit Zitat antworten Zitat
-=ZGD=-

Registriert seit: 25. Apr 2006
Ort: Bad Aibling
105 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

AW: Die "richtige" Sourcecode Formatierung?

  Alt 10. Aug 2016, 09:52
Abgesehen davon sind die Kombination von If-Then-Befehl nur selten kürzer als ca. 80 Zeichen und ich schrieb ja, dass ich bei "langen" If-Anweisungen ein Begin-End folgen lasse und somit der Dreizeiler der Normalfall ist.


Case geht da nicht?

[Edit] Okay..Ich hab Zeilen gelesen..Sorry
Stefan Michalk
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.

Geändert von -=ZGD=- (10. Aug 2016 um 09:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Die "richtige" Sourcecode Formatierung?

  Alt 10. Aug 2016, 09:54
[HUMOR]
Auf die ursprünglich Frage - Die "richtige" Sourcecocde Formatierung - kann es NUR eine Antwort geben -----> 42
[/HUMOR]

Greez, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:31 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