Styleguide
Anweisungen
Anweisungen sind ein oder mehrere Codezeilen gefolgt von einem Strichpunkt. Einfache Ausdrücke haben ein Semikolon, während zusammengesetzte Anweisungen mehr als ein Semikolon haben und folglich aus mehreren einfachen Anweisungen bestehen.
Hier ist eine einfache Anweisung:
A := B;
Hier ist eine zusammengesetzte (oder strukturierte) Anweisung:
begin B := C; A := B; end;
Einfache Anweisungen
Eine einfache Anweisung enthält einen einzelnen Strichpunkt. Wenn es nötig ist, die Anweisung auf mehrere Zeilen zu verteilen, rücken Sie die zweite Zeile zwei Leerstellen mehr ein als die vorherige Zeile:
MyValue := MyValue + (SomeVeryLongStatement / OtherLongStatement);
Zusammengesetzte Anweisungen
Zusammengesetzte Anweisungen enden immer mit einem Strichpunkt, außer sie stehen direkt vor einer end-Anweisung. In diesem Fall wäre der Strichpunkt optional.
begin MyStatement; MyNextStatement; MyLastStatement // Semikolon optional end;
Zuweisungen und Ausdrucksanweisungen
Jede Zeile sollte höchstens eine Anweisung beinhalten. Z. B.:
a := b + c; Inc(Count); // FALSCH a := b + c; // RICHTIG Inc(Count); // RICHTIG
Deklaration lokaler Variablen
Lokale Variablen sollten in „Camel Caps“ geschrieben sein, d.h. sie sollten mit einem Großbuchstaben beginnen und jedes enthaltene Wort als erstes einen Großbuchstaben haben. Beginnen Sie Variablen nicht mit einem F, wie es bei der Deklaration von Feldern in Klassendeklarationen der Fall ist.
var MyData: Integer; MyString: String;
Sie können mehrere Variablen desselben Typs in einer Zeile deklarieren:
var ArraySize, ArrayCount: Integer;
Dieses Vorgehen wird für Klassendeklarationen nicht empfohlen. Dort sollte jedes Feld in einer eigenen Zeile zusammen mit seinem Typ aufgeführt werden.
Array-Deklarationen
Hier sollte immer vor der geöffneten Klammer „[“ und nach der schließenden „]“ ein Leerzeichen stehen.
type TMyArray = array [0..100] of Char;
if-Anweisung
if-Anweisungen sollten immer mindestens in zwei Zeilen stehen.
Beispiel:
// FALSCH if A < B then DoSomething; // RICHTIG if A < B then DoSomething;
Setzen Sie in zusammengesetzten if-Anweisungen jedes Element, das Anweisungen voneinander trennt in eine neue Zeile:
// FALSCH if A < B then begin DoSomething; DoSomethingElse; end else begin DoThis; DoThat; end; // RICHTIG if A < B then begin DoSomething; DoSomethingElse; end else begin DoThis; DoThat; end;
Hier noch einige Möglichkeiten, die als gültig angesehen werden:
// RICHTIG if Condition then begin DoThis; end else begin DoThat; end; // RICHTIG if Condition then begin DoThis; end else DoSomething; // RICHTIG if Condition then begin DoThis; end else DoSomething;
Eine, die in Ungnade gefallen ist, aber eine ehrenvolle Erwähnung verdient hat:
if Condition then DoThis else DoThat;
for-Anweisung
Beispiel:
// FALSCH for i := 0 to 10 do begin DoSomething; DoSomethingElse; end; // RICHTIG for i := 0 to 10 do begin DoSomething; DoSomethingElse; end;
while-Anweisung
Beispiel:
// FALSCH while x < j do begin DoSomething; DoSomethingElse; end; // RICHTIG while x < j do begin DoSomething; DoSomethingElse; end;
repeat-until-Anweisung
Beispiel:
// RICHTIG repeat x := j; j := UpdateValue; until j > 25;
case-Anweisung
Beispiel:
// RICHTIG case Control.Align of alLeft, alNone: NewRange := Max(NewRange, Position); alRight: Inc(AlignMargin, Control.Width); end; // RICHTIG case x of csStart: begin j := UpdateValue; end; csBegin: x := j; csTimeOut: begin j := x; x := UpdateValue; end; end; // RICHTIG case ScrollCode of SB_LINEUP, SB_LINEDOWN: begin Incr := FIncrement div FLineDiv; FinalIncr := FIncrement mod FLineDiv; Count := FLineDiv; end; SB_PAGEUP, SB_PAGEDOWN: begin Incr := FPageIncrement; FinalIncr := Incr mod FPageDiv; Incr := Incr div FPageDiv; Count := FPageDiv; end; else Count := 0; Incr := 0; FinalIncr := 0; end;
try-Anweisung
Beispiel:
// RICHTIG try try EnumThreadWindows(CurrentThreadID, @Disable, 0); Result := TaskWindowList; except EnableTaskWindows(TaskWindowList); raise; end; finally TaskWindowList := SaveWindowList; TaskActiveWindow := SaveActiveWindow; end;