Styleguide
Quelldateien
Quelldateien sind grundsätzlich aufgeteilt in Units und Delphi-Projektdateien, welche beide den selben Konventionen folgen. Eine Delphi-Projektdatei hat die Erweiterung DPR. Sie ist die Hauptquelldatei eines Projekts. Jede Unit, die in dem Projekt verwendet wird, hat eine PAS-Erweiterung. Zusätzliche Dateien, wie z. B. Batch-Dateien, HTML-Dateien oder DLLs, mögen in dem Projekt eine Rolle spielen, aber dieses Dokument behandelt nur das Formatieren von DPR- und PAS-Dateien.
Benennung von Quelldateien
Die Delphi-Sprache unterstützt lange Dateinamen. Wenn Sie mehrere Wörter aneinanderhängen, um einen einzigen Namen zu erzeugen, ist es das Beste, jedes Wort in dem Namen mit einem Großbuchstaben zu beginnen: MyFile.pas. Dies ist bekannt als InfixCaps oder CarnelCaps. Erweiterungen sollten in Kleinbuchstaben sein. Aus historischen Gründen beschränkt sich der Delphi-Quellcode selbst auf das 8:3-Namensmuster, aber Entwickler müssen sich nicht länger von diesen Grenzen eingeschränkt fühlen, sogar beim Arbeiten an Code, der vom Delphi-Team genutzt werden könnte.
Wenn Sie eine C/C++-Headerdatei übersetzen, wird Ihre Pascal-Headerdatei gewöhnlich den gleichen Namen wie die übersetzte Datei haben, abgesehen davon, dass sie eine PAS-Erweiterung haben sollte. Aus Windows.h würde zum Beispiel Windows.pas werden. Wenn Sie die Regeln der Pascal-Grammatik dazu zwingen, mehrere Headerdateien in eine Unit zusammenzuführen, verwenden Sie den Namen der Basisunit, in die Sie die anderen Dateien integrieren. Wenn Sie zum Beispiel WinBase.h in Windows.h einbauen, nennen Sie die daraus entstehende Datei Windows.pas.
Quelldatei-Organisation
Alle Units sollten die folgenden Elemente in folgender Reihenfolge beinhalten:
- Copyright/ID-Block-Kommentar
- Unit-Name
- Interface-Abschnitt
- Implementation
- Ein schließendes End und eine Zeitdauer
Mindestens eine Leerzeile sollte jedes dieser Elemente trennen.
Zusätzliche Elemente können in der Reihenfolge strukturiert werden, wie Sie es am passendsten finden, ausgenommen davon, dass am Anfang der Datei immer das Copyright als erstes, den Unit-Namen als zweites, dann alle Bedingungsdefinitionen, Compilerdirektiven oder Include-Statements, dann die Uses-Klausel aufgeführt werden sollte:
{*******************************************************} { } { Borland Delphi Visual Component Library } { } { Copyright (c) 1995,98 Inprise Corporation } { } {*******************************************************} unit Buttons; {$S-,W-,R-} {$C PRELOAD} interface uses Windows, Messages, Classes, Controls, Forms, Graphics, StdCtrls, ExtCtrls, CommCtrl;
Es ist gleichgültig, ob Sie einen type-Abschnitt vor einen const-Abschnitt setzen oder ob Sie type- und const-Abschnitte in einer beliebigen, von Ihnen gewählten Reihenfolge mischen.
Die Implementation sollte mit dem Wort implementation beginnen, gefolgt von der uses-Klausel, dann beliebige Include-Statements oder andere Direktiven:
implementation uses Consts, SysUtils, ActnList, ImgList; {$R BUTTONS.RES}
Copyright-/ID-Kommentarblock
Jede Quelldatei sollte mit einem Kommentarblock beginnen, der Versionsinformationen und einen Standard-Copyrighthinweis enthält. Die Versionsinformation sollte in folgendem Format sein:
{*******************************************************} { } { Widgets Galore } { } { Copyright (c) 1995,98 Your Company } { } {*******************************************************}
Der Copyright-Hinweis sollte mindestens folgende Zeile umfassen:
Copyright (c) yearlist CopyrightHolder.
Wenn Sie eine Datei für die Verwendung durch Borland erstellen, können Sie Ihren Namen am Ende des Coyright-Hinweises hinzufügen:
{*******************************************************} { } { Borland Delphi Visual Component Library } { Copyright (c) 1995,99 Borland International } { Created by Project JEDI } { } {*******************************************************}
Unit-Deklaration
Jede Quelldatei sollte eine Unit-Deklaration enthalten. Das Wort „unit“ ist ein reserviertes Wort, weshalb es in Kleinbuchstaben geschrieben sein sollte. Der Name der Unit sollte in gemischter Groß- und Kleinschreibung sein und muss derselbe sein, wie ihn auch das Dateisystem des Betriebssystems verwendet. Beispiel:
unit MyUnit;
Diese Unit würde MyUnit.pas genannt werden, wenn sie in das Dateisystem eingetragen wird.
uses-Deklarationen
Innerhalb von Units sollte eine uses-Deklaration mit dem Wort „uses“ in Kleinbuchstaben beginnen. Fügen Sie die Namen der Units hinzu, wobei Sie die Groß- und Kleinschreibung beibehalten, wie Sie sie innerhalb der einzelnen Units finden:
uses MyUnit;
Jede Unit muss von ihrem Nachbar durch ein Komma getrennt werden, und nach der letzten Unit sollte ein Strichpunkt stehen:
uses Windows, SysUtils, Classes, Graphics, Controls, Forms, TypInfo;
Es ist korrekt, die uses-Klausel in der nächsten Zeile zu beginnen wie im obigen Beispiel, oder Sie können die Liste der Units auch in derselben Zeile beginnen:
uses Windows, SysUtils, Classes, Graphics, Controls, Forms, TypInfo;
Sie können die Liste der Units so formatieren, dass die Zeilen etwa nach 80 Zeilen umgebrochen werden, oder so, dass jede Unit in einer eigenen Zeile steht.
class/interface-Deklaration
Eine Klassendeklaration beginnt mit zwei Leerzeichen, gefolgt von einem Bezeichner mit einem großen T als Präfix. Bezeichner sollten mit einem Großbuchstaben beginnen, ebenso jedes darin enthaltene neue Wort (InfixCaps). Verwenden Sie niemals Tabulatoren in Ihrem Code. Beispiel:
TMyClass
Setzen Sie hinter den Bezeichner ein Leerzeichen, dann ein Gleichheitszeichen, dann das Wort „class“, alles in Kleinbuchstaben:
TMyClass = class
Wenn Sie den Vorfahren einer Klasse festlegen wollen, fügen Sie eine öffnende Klammer, den Namen der Vorfahrenklasse und eine schließende Klammer hinzu:
TMyClass = class(TObject)
Sichtbarkeitsanweisungen sollten zwei Stellen vom Rand eingerückt sein und in der gleichen Reihenfolge wie in folgendem Beispiel deklariert sein:
TMyClass = class(TObject) private protected public published end;
Daten sollten immer nur im private-Abschnitt deklariert werden, und ihr Bezeichner sollte mit einem großen F beginnen. Alle Typdeklarationen sollten vier Stellen Abstand zum Rand haben:
TMyClass = class(TObject) private FMyData: Integer; function GetData: Integer; procedure SetData(Value: Integer); public published property MyData: Integer read GetData write SetData; end;
Interfaces folgen denselben Regeln wie Klassendefinitionen, abgesehen davon, dass Sie Sichtbarkeitsanweisungen und private Daten vermeiden und das Wort „interface“ seltener als „class“ verwenden sollten.