|
nahpets
(Gast)
n/a Beiträge |
#20
Ok, dann auch mal mein Senf dazu:
Delphi-Quellcode:
Das end ist immer genauso weit eingerückt, wie das dazugehörige if.
// 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; 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:
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.
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; 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:
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.
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; 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). |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |