qingrui li Charles Calvert の Object Pascal Style Guide に基づいてコンパイルおよび注釈が付けられています。
注: Delphi を使用する人の多くはコーディング スタイルに注意を払わず、非標準のコードを作成することが多いため、他の人が理解しにくくなり、エラーが発生しやすくなります。この記事が、大多数の Delphi 愛好家に標準スタイルに統一して一緒に前進するよう促すことができれば幸いです。
この記事では、Delphi コードをフォーマットするための標準スタイルについて説明します。このサブスタイルは、Delphi 開発チームのコーディング規約に基づいています。私たちは、多くの一般的なソース コードが私たちのものとは異なるスタイルを使用していることを認識していますが、パブリック ソース コード コミュニティでは Borland スタイルの使用を強くお勧めします。
Delphi は美しい言語であり、その最も重要な利点の 1 つは読みやすさです。この規格は、可読性を高めるために設計されています。開発者がこの標準に従うと、すべての開発者が一貫性のある読みやすいスタイルの恩恵を受けることができます。スタイル標準を強制する取り組みにより、特にデバッグおよびメンテナンス サイクル中にソース プログラムの価値が高まります。
InfixCaps の命名スタイル
CamelCaps とも呼ばれるこの名前は、意味を表す複数の単語で構成され、各単語の最初の文字は大文字で、残りは小文字です。
例: MyFile、IntToStr、Items。
Delphi はハンガリー語表記を使用せず、意味のある名前を推奨します。たとえば、lpszAppName の代わりに AppName を使用し、bSuccess の代わりに Successful を使用し、lPRectClientRect の代わりに ClientRect を使用します。
ソースファイルの命名
InfixCaps フォームを使用します。 C/C++ ヘッダー ファイルをトランスパイルする場合は、元のヘッダー ファイルと同じ名前を使用します。複数のヘッダー ファイルを 1 つのユニットにマージする必要がある場合は、次のようにメイン ヘッダー ファイルの名前を使用します。WinBase.h、Windows.h は Windows.pas にマージされます。
命名規則
すべて小文字の予約語と指示語を除き、他の識別子は InfixCaps スタイルを使用します。
注: 最近、ローカル変数や仮パラメータに単純な小文字や略語を使用する傾向があるようです。
例外は、トランスパイルされたヘッダー ファイル内の識別子が元のスタイルを保持することです。
型名はすべて T (Type の最初の文字) で始まります。
関数、プロシージャ、およびメソッドの名前には動詞または動詞句が使用され、その他の識別子には名詞または名詞句が使用されます。
クラス データ メンバーは F (Field の最初の文字) で始まります
列挙型のメンバーの前には、小文字の型の省略形 (通常は 2 文字) が付きます。次に例を示します。
TBitBtnKind = (bkCustom、bkOK、bkCancel、bkHelp、bkYes、bkNo、bkClose、bkAbort、bkRetry、bkIgnore、bkAll);
Is で始まるブール値を返す関数 (例: IsVisible、IsResizable)
空白の使用
クラス宣言や関数実装の間など、コードの異なる部分を区切るために、適切な位置に空行を挿入します。
スペースを使用する場所: 句読点の右側、二項演算子の両側
スペースを挿入しない場所:
正しい例:
関数 TMyClass.MyFunc(var Value: Integer);MyPointer := @MyRecord;MyClass := TMyClass(MyPointer);MyInteger := MyIntegerArray[5];
エラーの例:
関数 TMyClass.MyFunc( var Value: Integer ) ;MyPointer := @ MyRecord;MyClass := TMyClass ( MyPointer ) ;MyInteger := MyIntegerArray [ 5 ] ;
インデント
2 スペースのインデントを使用し、タブ文字を使用しないでください。
begin...end の間のコードはインデントする必要がありますが、begin...end 自体はインデントしないでください。
行を続ける場合はスペースを 2 つインデントします
正しい例:
function CreateWindowEx(dwExStyle: DWord; lpClassName: PChar; lpWindowName: PChar; dwStyle: DWORD; if ((X = Y) または (Y = X) または (Z = P) または (F = J) thenbegin S := J;end;
while (LongExpression1 または LongExpression2) do begin // DoSomething // DoSomethingElse;end;if (LongExpression1) or (LongExpression2) or (LongExpression3) then
親切
クラス宣言は次の順序で構成されます
データフィールド
方法
財産
アクセス階層は、IDE によって自動的に生成されるコードを除き、次の順序で構成されます。
コンストラクターとデストラクターはメソッド宣言の前に宣言されます。 TObject.Destroy は仮想関数であり、TObject.Free は Destroy を呼び出すため、デストラクターに他の名前を使用しないでください。コンストラクターでは Create 以外の名前を使用できますが、通常は Create を使用するのが最善です。
例:
TMyClass = class(TObject) private protected publicpublished end;
データはプライベート セクションでのみ宣言され、F (Field の最初の文字) で始まる必要があります。
type TMyClass = class(TObject) private FMyData: 整数; 関数 GetData: 整数; プロシージャ SetData(Value: Integer); パブリック公開プロパティ MyData: 整数読み取り GetData 書き込み SetData;
インターフェイスは同じルールに従います