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 4 von 10   « Erste     234 56     Letzte »    
nahpets
(Gast)

n/a Beiträge
 
#31

AW: Die "richtige" Sourcecode Formatierung?

  Alt 9. Aug 2016, 20: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
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#32

AW: Die "richtige" Sourcecode Formatierung?

  Alt 9. Aug 2016, 20:59
(abgesehen davon finde ich den ganzen Thread irgendwie müßig, jeder hat da seine eigenen Vorlieben).
Meine Worte im anderen Thread. Aber, interessant mal zu sehen, wie Andere ihren Code formatieren.
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#33

AW: Die "richtige" Sourcecode Formatierung?

  Alt 9. Aug 2016, 23:23
Aber, interessant mal zu sehen, wie Andere ihren Code formatieren.
Darum geht es, deshalb finde ich solche Threads niemals müßig.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#34

AW: Die "richtige" Sourcecode Formatierung?

  Alt 10. Aug 2016, 00:06
Für mich sind bei der Formatierung wichtig:
  • Zwingend per Codeformatter machbar (nur manuell formatieren können ist Blödsinn, das dauert viel zu lange, wenn ich fremden Quelltext einpflegen muss usw.)
  • Weite Verbreitung der Formatierung, keine Sonderlocken
  • Natürliches Schreiben: keine tausend unnötige Leerzeichen oder ähnliches
  • Ein Befehl pro Zeile (damit man nicht erst die ganze Zeile durchlesen muss um weiterzulesen)
  • Pro logischer Ebene eine Einrückung um zwei Zeichen nach rechts
  • Kein Plenken
Das macht die Standardformatierung bereits, deshalb gibt es für mich keinen Grund eine andere zu benutzen. Zumal dies die häufigste Formatierung ist, wenn man so Open Source usw. anschaut. Alles andere ist eher selten bis exotisch zu finden.

Wegen des begin in einer Zeile:
Ich empfinde es als unsauber, wenn mehrere Befehle in eine Zeile gequetscht werden. Da läuft man nur in Gefahr etwas zu überlesen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#35

AW: Die "richtige" Sourcecode Formatierung?

  Alt 10. Aug 2016, 07:40
Wegen des begin in einer Zeile:
Ich empfinde es als unsauber, wenn mehrere Befehle in eine Zeile gequetscht werden. Da läuft man nur in Gefahr etwas zu überlesen.
Grundsätzlich sehe ich das wie Du: Wenn die IDE eine Formatierung als Standard verwendet mit der ich klar komme - warum ändern.. da bin ich viel zu faul dafür


Ich habe aber einige Jahre das Begin hinter die if-Verzweigung gesetzt (natürlich auch bei anderen Anweisungen), musste aber feststellen, dass diese Konstellation div. Probleme verursacht, wenn bei der Wartung nicht aufgepasst wird (d.h. das sind Fehler die vermutlich mir, aber auch anderen Entwicklern im Team passiert sind):

Anweisungen stehen im Block (eingerückt), aber das Begin-End fehlt - d.h. nur die erste Anweisung nach if wurde ausgeführt, die anderen immer
Anweisungen stehen nicht im Block (eingerückt) aber mit Begin-end (sollten also nicht im Then-Zweig stehen, tun sie aber)

...

All das hat mich dazu bewogen, das begin und end konsequent zu schreiben, auch bei nur einer Anweisung - auch um das Hirn bei der "Mustererkennung" zu entlasten
  Mit Zitat antworten Zitat
-=ZGD=-

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

AW: Die "richtige" Sourcecode Formatierung?

  Alt 10. Aug 2016, 08:19
All das hat mich dazu bewogen, das begin und end konsequent zu schreiben, auch bei nur einer Anweisung - auch um das Hirn bei der "Mustererkennung" zu entlasten
Sehe ich genauso. Hierbei geht es weniger um Faulheit, als um Wartbarkeit. Begin-End müssen einfach sein.
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.
  Mit Zitat antworten Zitat
SProske

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

AW: Die "richtige" Sourcecode Formatierung?

  Alt 10. Aug 2016, 08: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.475 Beiträge
 
Delphi 12 Athens
 
#38

AW: Die "richtige" Sourcecode Formatierung?

  Alt 10. Aug 2016, 09: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
 
#39

AW: Die "richtige" Sourcecode Formatierung?

  Alt 10. Aug 2016, 10: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
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#40

AW: Die "richtige" Sourcecode Formatierung?

  Alt 10. Aug 2016, 10:06
Delphi-Quellcode:
if .. then
  begin
  ..
  end
else if .. then
  begin
  ..
  end
else
  begin
  ..
  end;
Gruselig...Codesumpf nenne ich das...
Und ich nenne das nicht nett und aus dem Zusammenhang gegriffen.
Ist ja schön, wenn man mal sieht, wie andere den Code formatieren und warum. Das macht den Thread spassig. Wenn's aber zu "Mein Kung Fu ist besser als dein Kung Fu" abgleitet, bleibt der Spaß irgendwo auf der Strecke.

Ich habe so ein bißchen den Eindruck gewonnen, dass die Formatierung auch davon beeinflusst wird, in welchen Sprachen man noch so programmiert, sprich wie man in Java/C#/C++ die Klammern setzt, so setzt man begin/end in Delphi? Ich mache noch viel im Bereich MS-Office mit VBA. Da gibt es ja explizit das "ElseIf" und drum setzte ich das in Delphi halt auch in eine Zeile, weil der Code dann in Delphi ähnlich formatiert ist, wie in VBA.

Irgendwer hat auch geschrieben:
Zitat:
Delphi-Quellcode:
if ... then begin
  ...
end;
Das end gehört zum if ... (sinngemäß)
Ich dachte immer das end gehört zum begin (ausser beim try) und drum schreibe ich es auch auf eine Ebene.

Nur mal so nebenbei gefragt, macht ihr die Formatierungen bei Schleifen dann genauso?
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 10   « Erste     234 56     Letzte »    


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 21:02 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