程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi代碼風格約定

Delphi代碼風格約定

編輯:Delphi

  注:很多用Delphi的人不注意代碼風格,經常寫一些不規范的代碼,以致別人很難看懂且容易出錯。希望本文能鼓勵廣大Delphi愛好者統一到標准風格,共同前進。

  本文描述了格式化Delphi代碼的標准風格。次風格基於Delphi開發組的編碼約定。我們承認很多流行的源碼使用了不同於我們的風格,但是我們強烈推薦在公共源碼社區使用Borland風格。

  Delphi是個漂亮的語言,優點中重要的一條即是可讀性。本標准為增強可讀性設計。當開發者遵循本標准,所有開發者將從統一易讀的風格中受益。強化風格標准的努力可以提高源程序的價值,尤其在調試和維護周期。

  InfixCaps命名風格

  又叫CamelCaps,名字由幾個表達意義的詞組成,每個詞的首字母大寫,其余小寫。

  如:MyFile,IntToStr,Items。

  Delphi不使用匈牙利表示法,而推薦意義明確的名字。如用AppName而非lpszAppName,用Successful而非bSuccess,用ClientRect而非lprectClIEntRect。

  源文件命名

  使用InfixCaps形式。如果轉譯C/C++頭文件,則使用與原頭文件相同的名字。如果需要將多個頭文件合並到一個單元,則使用主要頭文件的名字,如:WinBase.h、Windows.h合並為Windows.pas。

  命名約定

  除了保留字和指示字全部小寫,其它標識符使用InfixCaps風格。

  注:最近似乎傾向於局部變量和形式參數使用簡單的小寫或縮寫詞。

  例外是轉譯頭文件的標識符保留原風格。

  類型名都以T打頭(Type的首字母)

  函數、過程、方法名使用動詞或動詞短語,其它標識符使用名詞或名詞短語。

  類數據成員以F打頭(FIEld的首字母)

  枚舉類型成員前冠以小寫的類型縮寫,一般兩個字母,例:

  TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp, 
    bkYes, bkNo, bkClose, bkAbort, bkRetry, 
    bkIgnore, bkAll);

  返回布爾值的函數以Is打頭,例:IsVisible、IsResizable

  空白的使用

  在適當位置插入空行,分隔代碼的不同部分,如類聲明間、函數實現間等。

  使用空格的位置:標點的右邊,二元運算符的兩邊

  不應插入空格的位置:

  1. 方法名和其後的左括弧間
  2. .的前後
  3. 一元運算符和其操作數間
  4. 左括弧後和右括弧前
  5. 分號前

  正確的例子:

function TMyClass.MyFunc(var Value: Integer);
MyPointer := @MyRecord;
MyClass := TMyClass(MyPointer);
MyInteger := MyIntegerArray[5];

  錯誤的例子:

function TMyClass.MyFunc( var Value: Integer ) ;
MyPointer := @ MyRecord;
MyClass := TMyClass ( MyPointer ) ;
MyInteger := MyIntegerArray [ 5 ] ;

  縮進

  應使用兩個空格的縮進,不要使用Tab字符。

  begin...end間的代碼要縮進,begin...end本身不縮進

  續行時縮進兩個空格

  正確的例子:

function CreateWindowEx(dwExStyle: DWORD; 
  lpClassName: PChar; lpWindowName: PChar; 
  dwStyle: DWord; X, Y, nWidth, nHeight: Integer;
  hWndParent: HWND; hMenu: HMENU; hInstance: HINST; 
  lpParam: Pointer): HWND; stdcall;

if ((X = Y) or (Y = X) or
  (Z = P) or (F = J) then
begin
  S := J;
end;
while (LongExpression1 or LongExpression2) do 
begin
  // DoSomething
  // DOSomethingElse;
end;

if (LongExpression1) or 
  (LongExpression2) or 
  (LongExpression3) then 

  類

類聲明安下列順序組織

  • 數據域

  • 方法

  • 屬性

訪問層次安下列順序組織,但IDE自動生成的代碼是例外

  • Private declarations
  • Protected declarations
  • Public declarations
  • Published declarations

構造函數和析構函數聲明在方法聲明的前面。由於TObject.Destroy是虛函數且TObject.Free調用的是Destroy,所以析構函數不要用其它的名字。構造函數可以用除Create外的名字,但一般最好統一用Create。

例:

  TMyClass = class(TObject)
  private
  protected
  public
  published
  end;

數據應該只在私有部分聲明,並以F打頭(FIEld的首字母)。

type
  TMyClass = class(TObject)
  private
    FMyData: Integer;
    function GetData: Integer;
    procedure SetData(Value: Integer);
  public
  published
    property MyData: Integer read GetData write SetData;
  end;

  接口遵循相同規則

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved