亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > Delphi > 正文

Delphi代碼的標(biāo)準(zhǔn)風(fēng)格

2019-11-18 18:44:18
字體:
供稿:網(wǎng)友
Object Pascal Style Guide - By Charles Calvert
(對(duì)象Pascal編碼風(fēng)格向?qū)?- 譯:Tommy Tong)
    我們承認(rèn)許多好的已經(jīng)確定的工作室或個(gè)人,擁有他們自己的和本文里所說的不同的編程習(xí)慣, 但是,我們強(qiáng)烈建議你使用一個(gè)工具將你的代碼轉(zhuǎn)換為Borland風(fēng)格的代碼,然后再提交給Borland,PRoject JEDI或其他任何公開的源代碼知識(shí)庫(kù)。我們不想強(qiáng)迫你改變你的習(xí)慣,但我們堅(jiān)持所有同Borland產(chǎn)品一起工作的的代碼遵循本文描述的習(xí)慣。
    對(duì)象Pascal是一種優(yōu)美的設(shè)計(jì)語(yǔ)言。較強(qiáng)的可讀性就是它的一個(gè)優(yōu)點(diǎn)。本文設(shè)計(jì)的標(biāo)準(zhǔn)將增強(qiáng)對(duì)象Pascal代碼的可讀性。當(dāng)開發(fā)人員遵從本文展現(xiàn)的這些簡(jiǎn)單的習(xí)慣,他們也將成為標(biāo)準(zhǔn),這將有益于所有的Delphi開發(fā)人員使用統(tǒng)一的易讀的代碼風(fēng)格。執(zhí)行這些標(biāo)準(zhǔn)的努力將增加開發(fā)人員的源代碼的價(jià)值,特別是在維護(hù)和調(diào)試循環(huán)階段。
    盡管我們相信并且贊美本文所宣揚(yáng)的風(fēng)格,但我們沒有必要支持它,因?yàn)樗旧硎钦_的而其它的則是錯(cuò)誤的。然而我們相信絕大多數(shù)開發(fā)人員遵從的標(biāo)準(zhǔn)是有它的功效的,所以我們?nèi)匀恢С植⒕S護(hù)該風(fēng)格。人類的大腦總在適應(yīng)標(biāo)準(zhǔn),并且找尋方法去快速組織所熟悉的模式,從而快速而有效地理解其含義。正是因這種要求而建立的標(biāo)準(zhǔn)將使大量的人盡可能容易的閱讀代碼。如果在初次使用我們的指導(dǎo)方針是感到陌生,那么我們請(qǐng)你堅(jiān)持一會(huì)兒,你會(huì)發(fā)現(xiàn)你也變得習(xí)慣了?;蛘撸绻阍敢?,你也可以保持你自己的風(fēng)格,并通過一個(gè)遵從我們標(biāo)準(zhǔn)的程序來轉(zhuǎn)換,然后你可以將你的代碼提交給Borland或其他知識(shí)庫(kù)了。
    一些文本編輯器,象Visual SlickEdit可以幫助你按照一定的風(fēng)格來格式化你的代碼。

一個(gè)免費(fèi)的由Egbert van Nes開發(fā)的格式化程序可以在以下的連接獲得:
http://www.slm.wau.nl/wkao/delforexp.html

另一個(gè)針對(duì)Delphi的商業(yè)化程序是CrackerJax:
http://www.kineticsoftware.com/html/products.html

----------------------------------------


1.0 介紹
    本文不是為Object Pascal語(yǔ)言定義語(yǔ)法規(guī)則的一種嘗試。例如:在else前面放置封號(hào)";"是違法的;編譯器不允許這種用法。所以我不會(huì)在本文中展示語(yǔ)法規(guī)則。本文旨在在語(yǔ)言提供選擇的地方定義適當(dāng)?shù)男袨榱?xí)慣。我通常在只有一種控制方法的地方保持沉默。

1.1 背景
    在本文出現(xiàn)的指導(dǎo)方針基于Delphi源代碼的一部分。Delphi源代碼恰好遵循這些指導(dǎo)方針。如果你發(fā)現(xiàn)了違反這些原則的情況,那么應(yīng)該是這些原則而不是那些不確定的源代碼成為你的指導(dǎo)方針。然而,你可以使用這些原代碼作為這些原則的補(bǔ)充,至少它可以幫助你得到關(guān)于你自己的代碼的形式的一般看法。

1.2 感謝
    本文這些格式是基于已完成的為java語(yǔ)言定義的風(fēng)格標(biāo)準(zhǔn)的工作的。Java在規(guī)則上對(duì)格式化Object Pascal源代碼是沒有任何影響的,但在Sun網(wǎng)站上的文檔是本文的基礎(chǔ)。 在某些特殊的地方本文的風(fēng)格和格式受到"A Coding Style Guide for Java WorkShop and Java Studio Programming"(Achut Reddy, 《Java車間和Java工作室的編碼向?qū)А?的很大啟發(fā)。該文章可在該URL找到:http://www.sun.com/workshop/java/wp-coding
    Delphi小組為本文的完成做出了重大貢獻(xiàn),事實(shí)上,如果沒有它們的幫助,本文是無法完成的。

2.0 源文件
    Object Pascal源代碼主要被分成單源文件和項(xiàng)目文件,他們都遵從相同的習(xí)慣。Delphi項(xiàng)目文件有一個(gè).DPR的擴(kuò)展名。它是項(xiàng)目的主文件。任何在項(xiàng)目中使用的單元文件都有一個(gè).PAS的擴(kuò)展名。其它的文件,象批處理文件、HTML文件或者DLLs也可以在項(xiàng)目中扮演一個(gè)角色,但本文只涉及項(xiàng)目文件和單元文件。

2.1 源文件命名
    Object Pascal支持長(zhǎng)文件名。如果你使用幾個(gè)單詞來形成一個(gè)單一的名稱,那么最好是為每個(gè)單詞使用大寫的開頭字母:MyFile.pas。這被認(rèn)為是插入式大寫或駝峰式大寫。擴(kuò)展名應(yīng)當(dāng)使用小寫形式。由于歷史原因,Delphi源代碼經(jīng)常使用8:3式命名模式,但開發(fā)人員不必為上述規(guī)則所限制而轉(zhuǎn)向Delphi小組的用法。
    如果你正在翻譯一個(gè)C/C++頭文件,那么你翻譯的Pascal文件要與C/C++頭文件保持相同的主文件名,擴(kuò)展名用.PAS。例如:Windows.h -> Windows.pas。如果Pascal語(yǔ)法強(qiáng)迫你將幾個(gè)頭文件組合到一個(gè)單一的單元文件中,那么包含其他頭文件的那個(gè)頭文件的文件名將作為新單元文件的名稱。例如:Windows.h包含了WinBase.h文件,則新的單元文件名為Windows.pas.

2.2 源文件組織
    所有的Object Pascal單元文件應(yīng)當(dāng)按照以下的順序包含下列元素:
版權(quán)/標(biāo)識(shí)塊注釋
單元名
接口段
實(shí)現(xiàn)部分
一個(gè)結(jié)束符"end."

每個(gè)部分之間至少空一行。

其它的元素應(yīng)當(dāng)被結(jié)構(gòu)化成你認(rèn)為最適當(dāng)?shù)捻樞颉5鏅?quán)應(yīng)當(dāng)出現(xiàn)在文件的最開始,然后是單元名,然后是任何條件定義、編譯器指示符或包含語(yǔ)句,然后是uses字句:


{*******************************************************}
{ }
{ 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;




如果你將type段放到const段之前,或者將它們兩者混合,那是沒有什么影響的。

實(shí)現(xiàn)部分需要首先將implementation寫出來,然后是uses字句,然后是其它的包含聲明或別的指示符:


implementation

uses
  Consts, SysUtils, ActnList,
  ImgList;




{$R BUTTONS.RES}

2.2.1 版權(quán)/標(biāo)識(shí)塊注釋
    每一個(gè)源文件都應(yīng)當(dāng)以一個(gè)包含版本信息和標(biāo)準(zhǔn)版權(quán)布告塊注釋開始。版本信息可以象下面這樣:


{*******************************************************}
{ }
{ Widgets Galore }
{ }
{ Copyright (c) 1995,98 Your Company }
{ }
{*******************************************************}




版權(quán)布告至少需要包含以下行:
    版權(quán)所有(C) 年份 版權(quán)所有者

如果你是為Borland開發(fā)軟件的第三方,你可以在版權(quán)的最后加入你自己的名字:


{*******************************************************}
{ }
{ Borland Delphi Visual Component Library }
{ Copyright (c) 1995,99 Borland International }
{ Created by Project JEDI }
{ }
{*******************************************************}




2.2.2 unit聲明
    每一個(gè)單元文件要有一個(gè)unit聲明。unit是一個(gè)保留字,因此它需要小寫。單元的名稱可以是大小寫混合的,但必須和單元文件的文件名相同。例如:
unit MyUnit;

則單元文件的名稱應(yīng)當(dāng)為MyUnit.pas。在文件系統(tǒng)中,它作為這個(gè)文件的入口。

2.2.3 uses聲明
    在單元內(nèi)部,uses聲明應(yīng)當(dāng)使用小些的uses引導(dǎo)。被引用的單元名要遵循在他自己的單元中被定義時(shí)使用的大寫習(xí)慣:
uses MyUnit;
    每一個(gè)單元名被一個(gè)逗號(hào)同其相鄰的單元名分開,最后一個(gè)單元名后面跟一個(gè)分號(hào):


uses
  Windows, SysUtils, Classes, Graphics, Controls, Forms,
  TypInfo;
    在uses的下一行開始加入單元名和在uses后面直接加入單元名同樣都是正確的。
uses Windows, SysUtils, Classes, Graphics, Controls, Forms,
  TypInfo;


    你可以格式化你的單元名列表,可以在80個(gè)字符限制下?lián)Q行,或者每個(gè)單元名一行。

2.2.4 類和接口定義
    類的定義以兩個(gè)空格開始,然后是一個(gè)前綴"T"。 前綴要大寫,每個(gè)內(nèi)嵌的單詞要大寫開頭。不要在Object Pascal源代碼中使用制表符"Tab"。例:
TMyClass
    在標(biāo)識(shí)符之后接一個(gè)空格,然后是等號(hào),然后是class單詞,class要小寫:
  TMyClass = class
    如果你的類是從祖先繼承來的,則需要加入包含著祖先類的左右括號(hào):
  TMyClass = class(TObject)
    范圍指示符離頁(yè)邊兩個(gè)空格,并以下面的順序出現(xiàn):
  TMyClass = clss(TObject)
  private
  protect
  public
  published
  end;
    數(shù)據(jù)通常只在private段聲明,并且它們的標(biāo)識(shí)符以"F"開始。所有此類的聲明離頁(yè)邊4個(gè)空格:


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


    接口遵從同類相同的規(guī)則,除了你應(yīng)當(dāng)忽略范圍指示符和私有數(shù)據(jù),并且使用interface單詞代替class單詞。
    命名習(xí)慣
    除了保留字和指示符是小寫外,所有的Pascal標(biāo)識(shí)符應(yīng)當(dāng)使用駝峰式格式,即每個(gè)標(biāo)識(shí)符開頭字母要大寫,內(nèi)嵌單詞的首字母也要大寫,只取首字母的縮寫詞也一樣。
MyIdentifier
MyFTPClass
    對(duì)此規(guī)則主要的例外是頭文件翻譯的情況,應(yīng)當(dāng)遵循在原頭文件中的命名習(xí)慣。例如:
    WM_LBUTTONDOWN,不要寫成wm_LButtonDown.
    除了頭文件翻譯外,不要使用下劃線分割單詞。類名應(yīng)當(dāng)是名詞或名詞短語(yǔ)。接口或類的名稱依賴于接口的顯而易見的目的、用途。

好的名字:
    AddressForm, ArrayIndexOutOfBoundsException
低劣的名字:
    ManageLayout //使用動(dòng)詞短語(yǔ)
    delphi_is_new_to_me //使用下劃線

3.1 單元命名
    參見單元聲明

3.2 類/接口命名
    參見類/接口聲明

3.3 域/字段命名
    使用駝峰式格式。以大寫的"F"開始,并且在private中聲明所有的數(shù)據(jù),使用屬性或獲取者(getter)和安裝者(setter)來提供公共的存取操作。例如:使用名字GetSomething來命名一個(gè)返回內(nèi)部域/字段值的函數(shù),使用SetSomething來命名一個(gè)設(shè)置域/字段值的過程。
    不要在const段全部使用大寫,除非是頭文件翻譯的需要。
    Delphi是在加利福尼亞開發(fā)的,所有我們阻止記號(hào)的使用,除非是頭文件翻譯的需要。
正確:
  FMyString: string;
不正確:
  lpstrMyString: string;
    當(dāng)然在枚舉類型定義中保留了匈牙利命名法:
    TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp,
      bkYes, bkNo, bkClose, bkAbort, bkRetry,
      bkignore, bkAll);
    在這種情況下字符bk被插入到這個(gè)枚舉類型的每一個(gè)元素前。bk意味著ButtonKind。
    在考慮命名習(xí)慣時(shí),要避免使用單個(gè)字符的名稱,但零時(shí)變量和循環(huán)變量除外。
    避免使用"l"(L)變量,因?yàn)樗?1"(one)無論在打印機(jī)還是在顯示器上都難以分辨。

3.4 方法命名
    方法命名也使用駝峰格式。方法命名習(xí)慣同非常量域的命名方法是相同的,但可以從上下文區(qū)分它們。方法命名應(yīng)當(dāng)強(qiáng)制使用動(dòng)詞或動(dòng)詞短語(yǔ)。例如:
//好的方法命名:
ShowStatus, DrawCircle, AddLayoutComponent
//差的方法命名:
MouseButton //名詞短語(yǔ),沒有描述功能
drawCircle //以小寫字母開頭
add_layout_component //使用了下劃線

//以下方法的功能不夠明確。它是開始運(yùn)行一個(gè)服務(wù)呢(更好:StartServer)還是判斷一個(gè)服務(wù)是否在運(yùn)行(更好:IsServerRunning)?
ServerRunning //動(dòng)詞短語(yǔ),但不是命令
    一個(gè)獲取或者設(shè)置一些類屬性的方法應(yīng)當(dāng)分別被稱為GetProperty或者SetProperty,Property代表該屬性的名稱。例如:
GetHeight, SetHeight
    一個(gè)測(cè)試類的布爾屬性的方法應(yīng)當(dāng)被命名為IsVisible,Visible代表屬性的名稱。例如:
    IsResizable, IsVisible

3.5 局部變量命名
    除了不使用"F"外,局部變量的命名規(guī)則同域/字段的命名規(guī)則一樣。參見3.3節(jié)。

3.6 保留字
    保留字和指示符要全部小寫。這有時(shí)有些混亂。例如:Integer是一個(gè)標(biāo)識(shí)符,并且以首字母大寫出現(xiàn)。而string保留字則全部小寫。

3.7 類型聲明
    所有類型名稱聲明以字母T開始,接下來和類的命名相同。

4.0 空白用法
    4.1 空白行
        空白行可以通過將邏輯相關(guān)的代碼段分組來提高可讀性。一個(gè)空白行也可以在下列地方使用:
        在版權(quán)注釋塊之后,包聲明(package),導(dǎo)入段(import)。
        類聲明之間。
        方法聲明之間。
    4.2 空格
        Object Pascal是一種非常清晰易讀的語(yǔ)言。通常,你不需要在代碼里加入很多空格來分隔行。以下幾條提供了一些原則該如何使用空格:
            4.2.2 不應(yīng)當(dāng)使用空格:
                在方法名和左括號(hào)之間;
                在.(dot)操作符之前或之后;
                在一元操作符和它的操作數(shù)之間;
                在一個(gè)類型和被它強(qiáng)制轉(zhuǎn)換的表達(dá)式之間;
                在左括號(hào)之后和右括號(hào)之前;
                在左方括號(hào)之后和右方括號(hào)之前;
                在一個(gè)封號(hào)前;
                例如:
                //正確用法:
                function TMyClass.MyFunc(var Value: Integer);
                MyPointer := @MyRecord;
                MyClass := TMyClass(MyPointer);
                MyInteger := MyIntegerArray[5];
                //錯(cuò)誤用法:
                function TMyClass.MyFunc( var Value: Integer ) ;
                MyPointer := @ MyRecord;
                MyClass := TMyClass ( MyPointer ) ;
                MyInteger := MyIntegerArray [ 5 ] ;

4.3 縮進(jìn)
    你應(yīng)當(dāng)總是為所有的縮進(jìn)層次縮進(jìn)兩個(gè)空格。換句話說就是,第一層縮進(jìn)兩個(gè)空格,第二層縮進(jìn)四個(gè)空格,第三層縮進(jìn)六個(gè)空格……。不要使用制表符Tab。
    當(dāng)然,仍然有少量的例外。保留字象unit, uses, type, interface, implementation, initialization 和finalization總是頂格的。單元的最后一個(gè)end標(biāo)識(shí)符也是頂格的。在項(xiàng)目文件中,program和主begin、end也是頂格的。在主begin..end塊內(nèi)則需要縮進(jìn)至少兩個(gè)空格。

4.4 續(xù)行
    行應(yīng)當(dāng)限制在80列以內(nèi)。超過80列的行應(yīng)當(dāng)被分成多個(gè)連續(xù)的行。所有的后續(xù)行應(yīng)當(dāng)排列在該聲明的第一行之后,并且縮進(jìn)兩個(gè)字符的空格。
    例如:
//正確:


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;


    不要在參數(shù)和它的類型之間換行,除非列表是由逗號(hào)分隔,那樣的話要在最后一個(gè)參數(shù)前換行,這樣類型名就在下一行開頭了。冒號(hào)和它的變量之間不應(yīng)該有空格,而冒號(hào)和類型名之間要有一個(gè)空格。
//正確:
procedure Foo(Param1: Integer; Param2: Integer);

//錯(cuò)誤:
procedure Foo( Param :Integer; Param2:Integer);
    一個(gè)后續(xù)行不應(yīng)以一個(gè)二進(jìn)制操作符開始。避免在通常不出現(xiàn)空白的地方割斷一行,比如在方法名和它的左括號(hào)之間,或者在一個(gè)數(shù)組名和它的左方括號(hào)之間。如果你必須在上述情況下割斷行,那么應(yīng)當(dāng)在左括號(hào)或左方括號(hào)之后換行。不要把begin放在其它代碼的同一行。
例如:
//錯(cuò)誤:


while (LongExpression1 or LongExpression2) do begin
  //DoSomething
  //DoSomethingElse;
end;




//正確


while (LongExpression1 or longExpression2) do
begin
  //DoSomething
  //DoSomethingElse;
end;

if (LongExpressiong1) or
  (LongExpression2) or
  (LongExpression3) then





5.0 注釋
    Object Pascal語(yǔ)言支持兩種注釋:塊和單行注釋。以下是一些注釋用法原則:
    ·在單元頂部放置注釋用以解釋單元的用途是有益的
    ·在類聲明前放置注釋是有益的
    ·在方法聲明前設(shè)置注釋是有益的
    ·避免語(yǔ)句含義明顯的注釋
        i := i + 1; //Add one to i
    ·記住,容易誤解的注釋比沒有注釋更加有害。
    ·避免在注釋里放入看上去要失效的信息
    ·避免在注釋的邊框里嵌入星號(hào)或其他的排版符號(hào)
    ·零時(shí)的注釋,即需要被改變或刪除的注釋,要在他們之前加上"???:"標(biāo)記,這樣易于查找。從觀念上來說,所有的零時(shí)注釋都應(yīng)當(dāng)在程序發(fā)布前刪除。
    // ???: Change this to call Sort when it is fixed
    List.MySort;


5.1 塊注釋
    Object Pascal支持兩種類型的塊注釋。最常用的是一對(duì)花括號(hào){}括起來的注釋。Delphi小組盡可能的保持該注釋少而簡(jiǎn)單。例如:你應(yīng)當(dāng)避免在你的注釋里使用星號(hào)來創(chuàng)建圖案或行。相反,使用空格來分隔你的注釋,就象你在字處理文檔里做的一樣。你的注釋里的單詞應(yīng)當(dāng)在第一個(gè)花括號(hào)的同一行開始,就象下面從DsgnIntf.pas中摘錄的一樣:

{ TPropertyEditor
  Edits a property of a component, or list of components,
  selected into the Object Inspector. The property
  editor is created based on the type of the
  property being edited as determined by the types
  registered by...
  etc...
    GetXxxValue
      Gets the value of the first property in the
      Properties property. Calls the appropriate
      TProperty GetXxxValue method to retrieve the
      value.
    SetXxxValue Sets the value of all the properties
      in the Properties property. Calls the appropriate
      TProperty SetXxxxValue methods to set the value. }
    塊注釋通常被用在版權(quán)注釋中。也被用來注釋掉一些代碼行。
    用于解釋方法的用途的塊注釋應(yīng)當(dāng)被訪在方法的聲明前面。
    例如:
// CORRECT

{ TMyObject.MyMethod
  This routine allows you to execute code. }

procedure TMyObject.MyMethod;
begin
end;

// INCORRECT

procedure TMyObject.MyMethod;
{******************************************************
  TMyObject.MyMethod
  This routine allows you to execute code.
*******************************************************}
begin
end;
    第二種塊注釋包含了兩個(gè)字符,括號(hào)和星號(hào):(* *)。這有時(shí)被稱為星括號(hào)注釋。這些注釋一般只在代碼開發(fā)時(shí)有用,它的主要好處是允許嵌套注釋,注釋嵌套少于兩層。Object Pascal不支持同類型的注釋嵌套,因此事實(shí)上只有一層嵌套:花括號(hào)在星括號(hào)里面,或者星括號(hào)在花括號(hào)里面。 只要在你不嵌套它們時(shí),在該類型的注釋中的其它類型的標(biāo)準(zhǔn)Pascal注釋將被忽略。因此,你可以使用該語(yǔ)法注釋一大塊既有代碼又有注釋的代碼:

(* procedure TForm1.Button1Click(Sender: TObject);


begin
  DoThis; // Start the process
  DoThat; // Continue iteration
  { We need a way to report errors here, perhaps using
    a try finally block ??? }

  CallMoreCode; // Finalize the process
end; *)


    在本例中,整個(gè)Button1Click方法被注釋掉了,包括其中的任何子注釋。

5.2 單行注釋
    單行注釋由注釋符//及其引導(dǎo)的文本組成,在文本和注釋符之間有一個(gè)空格。單行注釋同代碼在不同行的,要同代碼有相同的縮進(jìn)層次。你可以使用多個(gè)單行注釋形成大的注釋。
    在單行注釋或注釋組之前要有一個(gè)空行,除非它是一個(gè)塊的第一行。如果注釋用于幾條語(yǔ)句,那么注釋和注釋組之后要跟一個(gè)空行。如果注釋僅解釋它后面的一行聲明,則不必跟一個(gè)空行。
例如:
// Open the database
Table1.Open;
    單行注釋也可以跟在他們解釋的代碼聲明后面。這類注釋有時(shí)被引用為跟蹤注釋。在他們和代碼之間至少要有一個(gè)空格。如果有多個(gè)跟蹤注釋在一個(gè)代碼塊中同時(shí)出現(xiàn),那么這些注釋需要被對(duì)齊。
例如:


if (not IsVisible) then
    Exit; // nothing to do
Inc(StrLength); // reserve space for null terminator


    要避免對(duì)每行可執(zhí)行代碼進(jìn)行跟蹤注釋。在一個(gè)方法或函數(shù)的begin..end塊之間限制使用注釋、甚至讓其為空,則在通常情況下是最好的。長(zhǎng)的注釋可以出現(xiàn)在方法、函數(shù)的定義之前的塊注釋當(dāng)中。


6.1 類體的組織
    類體的組織應(yīng)當(dāng)遵循下列順序:
    ·域/字段聲明
    ·方法聲明
    ·屬性定義
    域/字段、屬性、方法應(yīng)當(dāng)按它們的名稱進(jìn)行字母索引排列。
    6.1.1 存取級(jí)別
        除了由IDE生成的代碼,類的范圍指示符應(yīng)當(dāng)按以下順序:
        ·private 聲明
        ·protect聲明
        ·public聲明
        ·published聲明
        在Object Pascal中,類成員有四種存取級(jí)別:發(fā)布的、公開的、受保護(hù)的和私有的--按存取能力遞減的順序排列。默認(rèn)的存取級(jí)別是published。一般,一個(gè)成員應(yīng)當(dāng)被賦予最合適它的最低的存取級(jí)別。例如:只能在同一單元中被其他類存取的成員就應(yīng)當(dāng)被聲明為私有的。同時(shí),聲明低存取級(jí)別的成員也給了編譯器提高優(yōu)化的機(jī)會(huì)。當(dāng)然,另一方面,使用低存取級(jí)別對(duì)子類的擴(kuò)展造成了困難。如果有理由認(rèn)為某個(gè)類在將來某個(gè)時(shí)候會(huì)被子類化,那么應(yīng)當(dāng)將那些需要被子類繼承擴(kuò)展的成員聲明為受保護(hù)的,用于存取私有數(shù)據(jù)的屬性也可以提供這方面的保護(hù)。
        你應(yīng)當(dāng)禁止對(duì)數(shù)據(jù)的公開存取。數(shù)據(jù)通常在private段聲明,任何對(duì)他的公開存取應(yīng)當(dāng)通過GetXXX、SetXXX方法或?qū)傩詠聿僮鳌?BR>    6.1.8 構(gòu)造函數(shù)聲明
        方法需要按字母索引排列。將構(gòu)造函數(shù)和析構(gòu)函數(shù)放在public段的開始或按照字母索引排列都是正確的。
        如果有多個(gè)構(gòu)造函數(shù)或你使用了多個(gè)相同的名字,那么應(yīng)當(dāng)根據(jù)形參列表來排列,參數(shù)少的在參數(shù)多的前面。這意味著如果存在沒有參數(shù)的構(gòu)造函數(shù)的話,那么它必定出現(xiàn)在第一個(gè)。為了和C++Builder保持最好的兼容,應(yīng)當(dāng)保證構(gòu)造函數(shù)的參數(shù)列表的唯一性。C++不是根據(jù)構(gòu)造函數(shù)的名稱來調(diào)用它的,所以區(qū)別多個(gè)構(gòu)造函數(shù)的唯一方法是通過它的參數(shù)列表。

6.2 方法聲明
    如果可能,方法聲明要出現(xiàn)在單獨(dú)一行上。
例如:
Examples:



procedure ImageUpdate(Image img, infoflags: Integer,
  x: Integer, y: Integer, w: Integer, h: Integer)




7.0 接口
    接口的聲明與類的聲明有相同的形式:


  InterfaceName = interface([inherited Interface])
    InterfaceBody
  end;


  接口聲明應(yīng)當(dāng)被縮進(jìn)兩格,接口體縮進(jìn)四格,end結(jié)束符縮進(jìn)兩格。
  在接口聲明中沒有域/字段。但屬性可以出現(xiàn)。
  所有的接口方法天生就是公開的和抽象的,用不著在接口聲明中包含此類關(guān)鍵字。
  除非有其他的注意事項(xiàng),否則接口的聲明同類的聲明具有相同的風(fēng)格。

7.1 接口體組織
    接口體的組織可以按以下的順序:
    ·接口方法聲明
    ·接口屬性聲明
    接口方法和屬性的聲明和類具有相同的風(fēng)格。

8.0 聲明
    聲明是由封號(hào)結(jié)尾的一行或幾行代碼。單一聲明只有一個(gè)封號(hào),復(fù)合聲明中有多個(gè)封號(hào)。
//這是單一聲明:
A := B;

//這是復(fù)合聲明:


begin
  B := C;
  A := B;
end;


    8.0.1 單一聲明
        如果需要將一個(gè)單一聲明換行,則需要參照上一行縮進(jìn)兩格。
//例如:


MyValue :=
  MyValue + (SomeVeryLongStatement / OtherLongStatement);




8.1.1 賦值和表達(dá)式聲明
每一行最多有一條聲明。
例如:


a := b + c; Inc(Count); //錯(cuò)誤
a := b + c; //正確
Inc(Count); //正確




8.1.2 局部變量聲明
    局部變量也使用駝峰格式,不要使用引導(dǎo)符"F",這是為類聲明中域/字段保留的。
例如:


var
  MyData: Integer;
  MyString: string;


    你可以在同一行聲明多個(gè)類型相同的變量:


var
  ArraySize, ArrayCount: Integer;


    這種聲明習(xí)慣在類聲明中是不提倡。

8.1.3 數(shù)組聲明
    通??偸窃谧蠓嚼ㄌ?hào)之前和右方括號(hào)之后放置一個(gè)空格:


type
  TMyArray = array [0..100] of Char;




8.2.3 if語(yǔ)句
    if語(yǔ)句至少要以兩行的形式出現(xiàn):
例如:
//錯(cuò)誤:


if A = B then DoSomething;



//正確


if A = B then
  DoSomething;


    如果是復(fù)合的if語(yǔ)句,則應(yīng)當(dāng)每個(gè)分隔符一個(gè)新行:
//錯(cuò)誤:


if A = B then begin
  DoSomething;
  DoSomethingElse;
end else begin
  DoThis;
  DoThat;
end;



//正確


if A = B then
begin
  DoSomething;
  DoSomethingElse;
end
else
begin
  DoThis;
  DoThat;
end;


    以下的少數(shù)變化可以被采用:
//正確


if Condition then
begin
  DoThis;
end else
begin
  DoThat;
end;




//正確


if Condition then
begin
  DoThis;
end
else
  DoSomething;




//正確


if Condition then
begin
  DoThis;
end else
  DoSoemthing;




//下面的方式可能不被關(guān)心,但卻是值得贊揚(yáng)的:


if Condition then
  DoThis
else DoThat;




8.2.4 for語(yǔ)句
Example:
// INCORRECT


  for i := 0 to 10 do begin
    DoSomething;
    DoSomethingElse;
  end;




// CORRECT


  for i := 0 to 10 do
  begin
    DoSomething;
    DoSomethingElse;
  end;




8.2.5 while 語(yǔ)句
Example:
// INCORRECT


  while x < j do begin
    DoSomething;
    DoSomethingElse;
  end;




// CORRECT


  while x < j do
  begin
    DoSomething;
    DoSomethingElse;
  end;




8.2.6 repeat until 語(yǔ)句
Example:
  // CORRECT


  repeat
    x := j;
    j := UpdateValue;
  until j = 25;




8.2.7 case 語(yǔ)句
Example:
// CORRECT


  case Control.Align of
    alLeft, alNone: NewRange := Max(NewRange, Position);
    alRight: Inc(AlignMargin, Control.Width);
  end;



  // CORRECT


  case x of
    CSStart:
      begin
        j := UpdateValue;
      end;
    csBegin: x := j;
    csTimeOut:
      begin
        j := x;
        x := UpdateValue;
      end;
  end;


  // CORRECT


  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;





8.2.8 try 語(yǔ)句

// Correct


  try
    try
      EnumThreadWindows(CurrentThreadID, @Disable, 0);
      Result := TaskWindowList;
    except
      EnableTaskWindows(TaskWindowList);
      raise;
    end;
  finally
    TaskWindowList := SaveWindowList;
    TaskActiveWindow := SaveActiveWindow;
  end;

作者Blog:http://blog.csdn.net/sailerbai/

上一篇:DELPHI開發(fā)Web程序常見問題

下一篇:DLL文件在Delphi的創(chuàng)建及調(diào)用

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片
猜你喜歡的新聞
猜你喜歡的關(guān)注

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

亚洲色图影院| 精品电影一区二区三区| 五月综合激情| 国产 日韩 欧美 综合 一区| 亚洲最大最好的私人影剧院| 精品少妇一区二区三区视频免付费| 欧美综合色免费| 老太脱裤让老头玩ⅹxxxx| 亚洲国产一区二区精品视频| 成年人视频网站免费| 91麻豆国产在线| 97se亚洲国产一区二区三区| 成人中文字幕在线| 日本在线播放一区| 精品一级毛片| 久久国产一区二区| 欧美日韩国产一区二区三区地区| 国产一区二区在线网站| 91欧美日韩麻豆精品| 天天综合色天天综合色hd| 成人免费视频播放| 伊人亚洲福利一区二区三区| 日韩欧美三级视频| 欧美肉体xxxx裸体137大胆| 奇门遁甲1982国语版免费观看高清| 亚洲视频香蕉人妖| 日本在线小视频| 久久伊人资源站| 国产午夜精品一区二区理论影院| 日韩成人在线网站| 欧美视频观看一区| 精品影片在线观看的网站| 精品久久一区二区三区| 色999韩欧美国产综合俺来也| 天堂网av在线播放| 少妇献身老头系列| 国产精品一区二区亚洲| 日本卡一卡2卡3卡4精品卡网站| 国产剧情一区二区在线观看| 45www国产精品网站| 成人永久aaa| 黑人与娇小精品av专区| 国产一区国产精品| 国产精品伦子伦免费视频| 一区二区久久久| 草b视频在线观看| 欧美日韩国产观看视频| 午夜亚洲福利| 亚洲电影免费观看高清| 日韩精品一区二区三区国语自制| 欧美日韩1区2区| 在线观看亚洲色图| 手机福利视频欧美| 99精品在线免费观看| 国产亚洲欧洲高清一区| 国产嫩bbwbbw高潮| 97高清免费视频| 日本理论片午伦夜理片在线观看| 国产欧美在线观看免费| 美腿丝袜亚洲色图| 国产高清一区二区三区视频| 日韩中文字幕av电影| 91.麻豆视频| 922tv免费观看在线| 亚洲色欲色欲www在线观看| 男人的天堂在线视频免费观看| 亚洲精品网址在线观看| 一区二区三区四区高清精品免费观看| 欧美成人片在线| 日韩亚洲国产欧美| 婷婷中文字幕一区| 人善交vide欧美| 欧美视频专区一二在线观看| 欧美亚洲国产日韩| 福利一区福利二区微拍刺激| jizz国产| 国产精品久久久国产盗摄| 欧亚在线中文字幕免费| 精品亚洲一区二区三区在线观看| 国产精品作爱| 男人天堂中文字幕| 亚洲在线观看免费视频| 欧美污视频网站| 日本激情综合网| 成人国产精品免费观看| 欧美国产视频一区二区| 精品国产aⅴ一区二区三区东京热| 色综合男人天堂| 中文字幕在线视频一区二区三区| a天堂中文在线观看| 精品久久久久久亚洲综合网站| 黄色av一区二区| 男人本色网站| 久久―日本道色综合久久| 久久欧美一区二区| 九九热线视频只有这里最精品| 日韩精品中文字幕在线| 日韩在线视频导航| 国产乡下妇女做爰| 亚洲成人第一网站| 中文字幕国产日韩| 亚洲va在线va天堂成人| 美女在线观看www| 国产综合精品久久| 久久久天堂国产精品| 中文字幕av资源| 亚洲国产视频一区二区三区| 久久久精品视频在线观看| 欧美成人app| 亚洲成色www.777999| 不卡一区二区中文字幕| 成人免费看片| 九色自拍麻豆| 五月天婷婷在线观看视频| 狠狠久久综合| 日本一区二区三区四区五区| 韩剧1988免费观看全集| 色爱精品视频一区| 樱花视频在线免费观看| 美女尤物在线视频| 成人午夜视频在线观看免费| 男人和女人啪啪网站| 97精品国产97久久久久久久久久久久| 成人免费播放视频| 中国老太性bbbxxxx| jizz大全欧美jizzcom| av男人天堂一区| 99精品视频精品精品视频| 国产日韩一区在线| 久久久婷婷一区二区三区不卡| 成人看片黄a免费看在线| 久久婷婷国产综合精品青草| 午夜看片在线免费| 女人公敌韩国| 国产美女18xxxx免费视频| 久久国产精品72免费观看| 国产精品成人国产乱| 国产激情第一页| 一广人看www在线观看免费视频| 亚洲国产中文在线| 在线不卡一区二区| 男人操女人逼免费视频| 性欧美1819| 黄频网站在线观看| 精品久久久久久久久久久国产字幕| 精品无码av无码免费专区| 蜜桃av一区二区三区| 国产精品久久久久久亚洲影视| 精品久久久av| 国产视频亚洲精品| 精品一区久久| av在线首页| 日韩中文字幕av电影| 懂色av中文在线| 亚洲不卡1卡2卡三卡2021麻豆| 国产精品亚洲片在线播放| 欧美性猛交xxx高清大费中文| 青青热久免费精品视频在线18| 污视频在线看网站| 久久久91精品国产一区二区三区| 四虎国产精品免费观看| 色婷婷av在线| 亚洲欧美一区二区不卡| 私人高清影院 强乱中文字| 午夜爱爱毛片xxxx视频免费看| 国产精品亚洲一区二区三区在线观看| 国模私拍一区二区国模曼安| 国产精品久久久久久久久搜平片| 美女久久久久| 裸体丰满少妇做受久久99精品| 嫩草影院一区二区三区| 日韩视频免费观看高清在线视频| 69夜色精品国产69乱| 国产精品乱码人人做人人爱| 欧美日韩一二三四| 亚洲高清一二三区| 久久国产精品一区二区三区四区| 天天色天天干天天色| 婷婷久久五月天| 91精品中文字幕一区二区三区| 你懂的好爽在线观看| 亚洲免费一区| 国产99久久久国产精品免费看| 九九九伊在人线综合| 深夜福利网站| 午夜av电影| 国产在线精品一区二区三区》| 深田咏美在线x99av| 色婷婷国产精品免| 性一爱一乱一交一视频| 欧美不卡激情三级在线观看| 牛牛电影国产一区二区| 色在人av网站天堂精品| 中文字幕黄色片| 日批视频网站| 少妇av片在线观看| 国产高清视频免费最新在线| 久久亚洲精品中文字幕蜜潮电影| 国产成人精品免费视频大全最热| 日韩欧美国产精品一区二区三区| 精品久久久久久久久久| 国产精品拍拍拍| 国产一区二区高清视频| jizzyou欧美16| 日韩欧美高清视频| 日日夜夜操视频| 国产无套粉嫩白浆内谢| 37pao成人国产永久免费视频| 一本色道综合久久欧美日韩精品| 国产成人久久精品77777| 日本一区精品视频| 在线观看av一区| 红桃av在线播放| 欧洲人成人精品| 九色视频在线观看免费| 中文在线√天堂| 中文字幕 自拍偷拍| 久久综合色视频| 久久精品99久久久香蕉| 日韩一级二级三级| 亚洲综合免费观看高清完整版在线| 精品国产伦一区二区三区观看说明| 成人精品福利视频| 国产美女永久免费无遮挡| 色是在线视频| 国产福利免费视频| 中文字幕日韩在线视频| seba5欧美综合另类| 九九热视频精品在线观看| 国产精品高潮粉嫩av| 和岳每晚弄的高潮嗷嗷叫视频| 色88久久久久高潮综合影院| av不卡中文字幕| 翔田千里精品久久一区二| 老牛国内精品亚洲成av人片| 99久久夜色精品国产亚洲1000部| 另类成人小视频在线| 日韩成人免费在线| 久久综合九色综合久久久精品综合| 91精品xxx在线观看| 欧美精品99久久久**| 久久综合电影| 99久久国产综合精品麻豆| 红杏成人性视频免费看| 人妻内射一区二区在线视频| 欧美另类交人妖| 久久riav二区三区| 久久亚洲一级片| 日韩av播放器| 欧美亚洲色图视频| 91香蕉国产在线观看| 精品中文字幕一区二区三区四区| 国产精品国产三级国产普通话蜜臀| 国产精品视频在线观看免费| 国产精品极品美女在线观看免费| 国产一二三四区| 亚洲精品免费观看| 女生裸体无遮挡天堂网站免费| 四虎4545www精品视频| 欧美精品一区男女天堂| 亚洲xxxx做受欧美| 国产精品久久久久久久久久久久久久| 一区二区三区在线观看视频| 在线日韩中文字幕| 欧美 日韩 国产 成人 在线 91| 91精品国产91久久久久| 欧美猛男做受videos| 国产亚洲精品久久777777| 亚洲视频日韩| 日本不卡高清| 久久精品国产成人av| 理论片播放午夜国外| 中文字幕免费视频观看| 国产乱人伦精品一区二区在线观看| 在线电影欧美成精品| 成人免费网址在线| eeuss国产一区二区三区四区| 337p日本欧洲亚洲大胆精品| av漫画在线观看| 免费观看性欧美大片无片| 国产视频一区不卡| 国产黄色大片免费看| 91丨九色丨国产在线| 日韩在线视频观看免费| 国产清纯白嫩初高生在线观看91| 男女羞羞在线观看| 日韩视频一二三| 情侣偷拍对白清晰饥渴难耐| 91玉足脚交嫩脚丫在线播放| 成人在线免费视频观看| 亚洲三级 欧美三级| 瑟瑟视频在线观看| av在线网站免费观看| 高清孕妇孕交╳╳交| 色播亚洲视频在线观看| 久国产精品韩国三级视频| 欧美日韩在线一区二区三区| 欧美一区二区三区久久综| 国产精品91在线| 亚洲精品日本| 懂色av一区二区三区免费看| 99精品视频免费观看视频| 99精品一区二区三区的区别| 影音先锋导航| 亚洲综合日韩欧美| 欧美毛片免费观看| 韩国黄色一级大片| 日韩欧美一区二区一幕| 欧美中文字幕一二三区视频| 久热中文字幕| 欧美色网在线| 91po在线观看91精品国产性色| 高清一区二区| 欧美 亚欧 日韩视频在线| 国产一级黄色av| 欧美国产亚洲另类动漫| 欧美亚韩一区二区三区| 国产综合一区二区| 中文字幕在线1| 韩国三级电影一区二区| 亚洲福利免费| 亚洲精品911| 国产精品一二三在线观看| 亚洲精品国产首次亮相| 成人日韩在线视频| 亚洲成人黄色在线观看| 手机在线观看日韩av| 国产亚洲精品久久飘花|