qingrui li Zusammengestellt und kommentiert auf der Grundlage von Charles Calverts Object Pascal Style Guide
Hinweis: Viele Benutzer von Delphi achten nicht auf den Codierungsstil und schreiben häufig nicht standardmäßigen Code, was es für andere schwierig und fehleranfällig macht, ihn zu verstehen. Ich hoffe, dass dieser Artikel die Mehrheit der Delphi-Enthusiasten dazu ermutigen kann, sich auf den Standardstil zu einigen und gemeinsam voranzukommen.
In diesem Artikel wird der Standardstil zum Formatieren von Delphi-Code beschrieben. Dieser Unterstil basiert auf den Codierungskonventionen des Delphi-Entwicklungsteams. Wir sind uns bewusst, dass viele gängige Quellcodes einen anderen Stil als wir verwenden, empfehlen jedoch dringend die Verwendung des Borland-Stils in der Community für öffentliche Quellcodes.
Delphi ist eine wunderschöne Sprache und einer ihrer wichtigsten Vorteile ist die Lesbarkeit. Dieser Standard soll die Lesbarkeit verbessern. Wenn Entwickler diesen Standard befolgen, profitieren alle Entwickler von einem einheitlichen und lesbaren Stil. Bemühungen zur Durchsetzung von Stilstandards können den Wert von Quellprogrammen steigern, insbesondere während Debugging- und Wartungszyklen.
InfixCaps-Benennungsstil
Der Name wird auch CamelCaps genannt und besteht aus mehreren Wörtern, die eine Bedeutung ausdrücken. Der erste Buchstabe jedes Wortes wird großgeschrieben, der Rest ist kleingeschrieben.
Zum Beispiel: MyFile, IntToStr, Items.
Delphi verwendet keine ungarische Notation und empfiehlt aussagekräftige Namen. Verwenden Sie beispielsweise AppName anstelle von lpszAppName, Successful anstelle von bSuccess und ClientRect anstelle von lPRectClientRect.
Benennung der Quelldatei
Verwenden Sie das InfixCaps-Formular. Wenn Sie eine C/C++-Header-Datei transpilieren, verwenden Sie denselben Namen wie die ursprüngliche Header-Datei. Wenn mehrere Header-Dateien zu einer Einheit zusammengeführt werden müssen, verwenden Sie den Namen der Haupt-Header-Datei, z. B.: WinBase.h, Windows.h werden in Windows.pas zusammengeführt.
Namenskonvention
Mit Ausnahme reservierter Wörter und Anweisungswörter, die alle in Kleinbuchstaben geschrieben sind, verwenden andere Bezeichner den InfixCaps-Stil.
Hinweis: Es scheint in letzter Zeit einen Trend zur Verwendung einfacher Kleinbuchstaben oder Abkürzungen für lokale Variablen und formale Parameter zu geben.
Die Ausnahme besteht darin, dass Bezeichner in transpilierten Header-Dateien ihren ursprünglichen Stil beibehalten.
Typnamen beginnen alle mit T (dem ersten Buchstaben des Typs).
Funktions-, Prozedur- und Methodennamen verwenden Verben oder Verbphrasen, und andere Bezeichner verwenden Substantive oder Nominalphrasen.
Klassendatenelemente beginnen mit F (dem ersten Buchstaben von Field).
Den Elementen des Aufzählungstyps wird eine Typabkürzung in Kleinbuchstaben vorangestellt, normalerweise zwei Buchstaben, zum Beispiel:
TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo, bkClose, bkAbort, bkRetry, bkIgnore, bkAll);
Funktionen, die boolesche Werte zurückgeben, beginnen mit Is, zum Beispiel: IsVisible, IsResizable
Verwendung von Leerraum
Fügen Sie an geeigneten Stellen Leerzeilen ein, um verschiedene Teile des Codes zu trennen, z. B. zwischen Klassendeklarationen, Funktionsimplementierungen usw.
Wo Leerzeichen verwendet werden: Rechts von Satzzeichen, auf beiden Seiten von binären Operatoren
Wo Leerzeichen nicht eingefügt werden sollten:
Richtiges Beispiel:
function TMyClass.MyFunc(var Value: Integer);MyPointer := @MyRecord;MyClass := TMyClass(MyPointer);MyInteger := MyIntegerArray[5];
Fehlerbeispiel:
function TMyClass.MyFunc( var Value: Integer ) ;MyPointer := @ MyRecord;MyClass := TMyClass ( MyPointer ) ;MyInteger := MyIntegerArray [ 5 ] ;
Vertiefung
Es sollte ein Einzug mit zwei Leerzeichen und keine Tabulatorzeichen verwendet werden.
Der Code zwischen begin...end sollte eingerückt werden und begin...end selbst sollte nicht eingerückt werden.
Beim Fortsetzen von Zeilen zwei Leerzeichen einrücken
Richtiges Beispiel:
function CreateWindowEx(dwExStyle: DWord; lpClassName: PChar; lpWindowName: PChar; dwStyle: DWORD; if ((X = Y) oder (Y = X) oder (Z = P) oder (F = J) thenbegin S := J;end;
while (LongExpression1 or LongExpression2) do begin // DoSomething // DoSomethingElse;end;if (LongExpression1) or (LongExpression2) or (LongExpression3) then
Art
Klassendeklarationen sind in der folgenden Reihenfolge organisiert
Datenfeld
Verfahren
Eigentum
Die Zugriffshierarchie ist in der folgenden Reihenfolge organisiert, mit Ausnahme des von der IDE automatisch generierten Codes.
Konstruktoren und Destruktoren werden vor der Methodendeklaration deklariert. Da TObject.Destroy eine virtuelle Funktion ist und TObject.Free Destroy aufruft, verwenden Sie keine anderen Namen für den Destruktor. Der Konstruktor kann einen anderen Namen als „Create“ verwenden, im Allgemeinen ist es jedoch am besten, „Create“ zu verwenden.
Beispiel:
TMyClass = class(TObject) privat geschützt öffentlich veröffentlicht Ende;
Daten sollten nur im privaten Bereich deklariert werden und mit F (dem ersten Buchstaben von Field) beginnen.
type TMyClass = class(TObject) private FMyData: Integer; function GetData: Integer; publicpublicated property MyData: Integer read GetData write SetData;
Schnittstellen folgen den gleichen Regeln