Home » Object Pascal » Styleguide

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;