Delphi源程式格式書寫規範 (轉)

gugu99發表於2008-07-23
Delphi源程式格式書寫規範 (轉)[@more@]

1.規範簡介
本規範主要規定源在書寫過程中所應遵循的規則及注意事項。編寫該規範的目的是使公司開發人員的書寫習慣保持一致。這樣做可以使每一個組員都可以理解其它組員的程式碼,以便於原始碼的二次開發記憶的維護。
2.一般格式規範
2.1縮排
縮排就是在當源程式的級改變時為增加可讀性而露出的兩個空格。縮排的規則為每一級縮排兩個空格。不准許使用Tab。因為Tab會因為所作的設定不同而產生不同的效果。當遇到begin 或進入判斷、迴圈、異常處理、with語句、記錄型別宣告、類宣告等的時侯增加一級, 當遇到end或退出判斷、迴圈、異常處理、with語句、記錄型別宣告、類宣告等的時侯減少一級。例如:
if TmpInt <> 100 then
  TmpInt := 100;
2.2 Begin..End
begin語句和end語句在源程式中要獨佔一行,例如:
for I := 0 to 10 do begin //不正確的用法
end;
for I := 0 to 10 do  //正確的用法
begin
end;
2.3空格
在運算子及邏輯判斷符號的兩端新增空格,例如:I := I + 1;,a and b 等,但新增括號時不需要空格。例如:if ( a > b ) then  //錯誤的用法
If (a > b) then //正確的用法
又例如:procedure Test(Param1: integer; Param3: string);
3. Pascal語法書寫格式規範
3.1保留字
Object Pascal 語言的保留字或關鍵詞應全部使用小寫字母。
3.2過程和
3.2.1命名及格式
過程和函式的名稱應全部使用有意義的單片語成,並且所有單詞的第一個字母應該使用大寫字母。例如:
procedure formatharddisk;//不正確的命名
procedure FormatHardDisk;//正確的命名
設定變數內容的過程和函式,應使用Set作為字首,例如:
procedure SetUserName;
讀取變數內容的過程和函式,應使用Get作為字首,例如:
function GetUserName: string;
3.2.2 過程和函式的引數
3.2.2.1命名
統一型別的引數寫在同一句中:
procedure Foo(Param1, Param2, Param3: Integer; Param4: string);
3.2.2.2命名
所有引數必須是有意義的;並且當引數名稱和其它屬性名稱重了的時候,加一個字首‘A’, 例如:
procedure SomeProc(AUserName: string; AUserAge: integer);
3.2.2.3命名衝突
當使用的兩個unit中包括一個重名的函式或過程時, 那么當你引用這一函式或過程時,將在use 子句中後宣告的那個unit中的函式或過程。為了避免這種‘uses-clause-dependent’需要在引用函式或過程時,寫完整函式或過程的出處。例如:
SysUtils.FindClose(SR);
.FindClose(Handle);
3.3 變數
3.3.1 變數命名及格式
首先所有變數必須起有意義的名字,使其它組員可以很容易讀懂變數所代表的意義,變數命名可以採用同義的英文命名,可使用幾個英文單詞,但每一單詞的首字母必須大寫。例如:
var
  WriteFormat::string;
同時對於一些特定型別可採用一定的簡寫如下:
指標型別
 P
 
紀錄型別
 Rec
 
陣列型別
 Arr
 

 Class
 
迴圈控制變數通常使用單一的字元如:i, j, 或 k。 另外使用一個有意義的名字例如:UserIndex ,也是准許的。
3.3.2 區域性變數
在過程中使用區域性變數遵循所有其它變數的命名規則。
3.3.3 全域性變數
儘量不使用全域性變數,如必須使用全域性變數則必須加字首‘g’,同時應在變數名稱中體現變數的型別。例如:
  gprecUserCount: point;//名稱為UserCount的全域性變數,其型別為指向一結構的指標
但是在模組內部可以使用全域性變數。所有模組內全域性變數必須用‘F’為字首。如果幾個模組之間需要進行資料,則需要透過宣告屬性的方法來實現。例如:
type
  TFormOverdraftReturn = class(TForm)
  private
{ Private declarations }
FuserName: string;
FuserCount: Integer;
Procedure SetUserName(Value: string);
Function GetUserName: string;
  public
{ Public declarations }
property UserName: string read GetUserName write SetUserName;
property UserCount: Integer read FuserCount write FuserCount;
  end;
3.4型別
3.4.1 大小寫
保留字的型別名稱必須全部小寫。 的型別通常全部大寫,對於其它型別則首字母大寫,其餘字母小寫,例如:
var
  MyString: string;  // reserved
  WindowHandle: HWND; // Win32 API type
  I: Integer;  // type ntifier introduced in System unit
3.4.2 浮點型別
儘量不使用 Real 型別,他只是為了和舊的Pascal程式碼相容,儘量使用Double 型別。Double 型別是對和資料匯流排做過最的並且是IEEE定義的標準資料結構。當數值超出Double的範圍時,使用Extended 。但Extended不被Jave支援。但使用其它語言編寫的DLL時可能會使用Single 型別。
3.4.3 列舉型別
列舉型別的名字必須有意義並且型別的名字之前要加字首‘T’。列舉型別的內容的名字必須包含列舉型別名稱的簡寫,例如:
TSongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB);
3.4.4 陣列型別
陣列型別的名字必須有意義並且型別的名字之前要加字首‘T’。如果宣告一個指向陣列型別的指標必須在該型別的名字之前加字首‘P’,例如:
type
  PCycleArray = ^TCycleArray;
  TCycleArray = array[1..100] of integer;
3.4.5記錄型別
記錄型別的名字必須有意義並且型別的名字之前要加字首‘T’。如果宣告一個指向陣列型別的指標必須在該型別的名字之前加字首‘P’,例如:
type
  PEmployee = ^TEmployee;
  TEmployee = record
  EmployeeName: string
  EmployeeRate: Double;
  end;
3.5類
3.5.1 命名及格式
類的名字必須有意義並且型別的名字之前要加字首‘T’。例如:
type
  TCustomer = class(TObject)
類例項的名字通常是去掉‘T’的類的名字。例如:
var
  Customer: TCustomer;
3.5.2 類中的變數
3.5.2.1命名及格式
類的名字必須有意義並且型別的名字之前要加字首‘F’。所有的變數必須是四有的。如果需要從外部訪問此變數則需要宣告一屬性
3.5.3 方法
3.5.3.1命名及格式
同函式和過程的命名及格式。
3.5.3.2 屬性訪問方法
所有的屬性訪問方法必須出現在private 或 protected 中。屬性訪問方法的命名同函式和過程的命名另外讀方法(reader method)必須使用字首‘Get’. 寫方法(writer method)必須使用字首‘Set’。寫方法的引數必須命名為‘Value’,其型別同所要寫的屬性相一致。例如:
TSomeClass = class(TObject)
private
  meField: Integer;
protected
  function GetSomeField: Integer;
  procedure SetSomeField( Value: Integer);
public
  property SomeField: Integer read GetSomeField write SetSomeField;
end;
3.6屬性
3.6.1 命名及格式
同其用操作的,出去字首‘F’的類的變數的名稱相一致 。
3.7
3.7.1專案檔案
3.7.1.1專案目錄結構
程式主目錄--Bin(應用程式所在路徑)
  -(本地所在路徑)
  -Doc(文件所在路徑)
  -Hlp(幫助檔案所在路徑)
  -Backup(路徑)
  -Tmp(臨時檔案路徑)
3.7.1.2命名
專案檔案必須使用一個有意義的名字。例如: Delphi中系統資訊的專案檔案被命名為 SysInfo.dpr。
3.7.2 Fo檔案
3.7.2.1命名
同Form的名稱相一致:例如:Form的名稱為FormMain則Form檔案的名稱就為FormMain.frm。
3.7.3 Data Module 檔案
3.7.3.1命名
data module檔案的命名應該有意義,並且使用‘DM’作為字首。例如: 使用者data module 被命名為‘DMCustomers.dfm’。
3.7.4 Remote Data Module 檔案
3.7.4.1 命名
remote data module檔案的命名應該有意義,並且使用‘RDM’作為字首。例如:使用者remote data module 被命名為‘RDMCustomers.dfm’。
3.7.5 Unit檔案
3.7.5.1普通 Unit
3.7.5.1.1 Unit檔案命名
unit檔案的命名應該有意義,並且使用‘unit’作為字首。例如: 通用unit 被命名為‘UnitGeneral’。
3.7.5.2 Form Units
3.7.5.2.1命名
Form unit 檔案的名字必須和Form的名稱保持一致。例如:主窗體叫FormMain.pas 則Form Unit檔案的名字為:UnitFormMain。
3.7.5.3 Data Module Units
3.7.5.3.1命名
Data Module unit 檔案的名字必須和Data Module的名稱保持一致。例如:主Data Module叫DMMain.pas 則Data Module Unit檔案的名字為:UnitDMMain。
3.7.5.4 檔案頭
在所有檔案的頭部應寫上此檔案的用途,作者,日期及輸入和輸出。例如:
{
修改日期:
作者:
用途:
本模組結構組成:
}
3.7.6 Forms和Data Modules Forms
3.7.6.1 Form類
1. Form類命名標準
Forms類的命名應該有意義,並且使用‘TForm’作為字首。例如: About Form類的名字為:
TAboutForm = class(TForm)
主窗體的名字為
TMainForm = class(TForm)
2. Form類例項的命名標準
Form 的類例項的名字應同期掉‘T’的Form類的名字相一致。例如:
Type Name
 Instance Name
 
TaboutForm
 AboutForm
 
TmainForm
 MainForm
 
TCustomerEntryForm
 CustomerEntryForm
 
 
3.7.6.2 Data Modules Form
3.7.6.2.1. Data Module Form 命名標準
Data Modules Forms類的命名應該有意義,並且使用‘TDM’作為字首。例如:
TDMCustomer = class(TDataModule)
TDMOrders = class(TDataModule)
3.7.6.2.2. Data Module 例項命名標準
Data Module Form 的類例項的名字應同期掉‘T’的Data Module Form類的名字相一致。例如:
Type Name
 Instance Name
 
TCustomerDataModule
 CustomerDataModule
 
TordersDataModule
 OrdersDataModule
 
3.8
3.8.1 控制元件例項的命名
控制元件的例項應使用去掉‘T’該控制元件類的名稱作為字首,例如:
輸入使用者姓名的Tedit的名字為:EditUserName。
3.8.2 控制元件的簡寫
控制元件的名稱可使用以下簡寫,但所用簡寫於控制元件名稱之間藥新增‘_’:
3.8.2.1 Standard Tab
mm TMainMenu
pm TPopupMenu
mmi TMainMenuItem
pmi TPopupMenuItem
lbl TLabel
edt TEdit
mem TMemo
btn TButton
cb TCheckBox
rb TRadioButton
lb TListBox
cb TComboBox
scb TScrollBar
gb TGroupBox
rg TRadioGroup
pnl TPanel
cl TCommandList
3.8.2.2 Additional Tab
bbtn TBitBtn
sb TSpeedButton
me TMaskEdit
sg TStringGrid
dg TDrawGrid
img TImage
shp TShape
bvl TBevel
sbx TScrollBox
clb TCheckListbox
spl TSplitter
stx TStaticText
cht TChart
3.8.2.3 Win32 Tab
tbc TTabControl
pgc TPageControl
il TImageList
re TRichEdit
tbr TTrackBar
prb TProgressBar
ud TUpDown
hk THotKey
ani TAnimate
dtp TDateTimePicker
tv TTreeView
lv TListView
hdr THeaderControl
stb TStatar
tlb TToolBar
clb TCoolBar
3.8.2.4 System Tab
tm TTimer
pb TPaintBox
mp TMedia
olec TOleContainer
ddcc TDDEClientConv
ddci TDDEClientItem
ddsc TDDEServerConv
ddsi TDDEServerItem
3.8.2.5 Inte Tab
csk TClientSocket
ssk TServerSocket
wbd TDispatcher
pp TPageProducer
tp TQueryTableProducer
dstp TDataSetTableProducer
nmdt TNMDayTime
nec TNMEcho
nf TNMFinger
n TNMFtp
nhttp TNMHttp
nMsg TNMMsg
nmsg TNMMSGServ
nntp TNMNNTP
npop TNMPop3
nuup TNMUUProcessor
smtp TNMSMTP
nst TNMStrm
nsts TNMStrmServ
ntm TNMTime
nudp TNMUdp
psk TPowerSock
ngs TNMGeneralServer
html THtml
url TNMUrl
sml TSimple
3.8.2.6 Data Access Tab
ds TData
tbl TTable
qry TQuery
sp TStoredProc
db TDataBase
ssn TSession
bm TBatchMove
u TUpdateSQL
3.8.2.7 Data Controls Tab
dbg TDBGrid
dbn TDBNavigator
dTDBText
dbe TDBEdit
dbm TDBMemo
dbi TDBImage
dblb TDBListBox
dbcb TDBComboBox
dbch TDBCheckBox
dbrg TDBRadioGroup
dbll TDBLookupListBox
dblc TDBLookupComboBox
dbre TDBRichEdit
dbcg TDBCtrlGrid
dbch TDBChart
3.8.2.8 Decision Cube Tab
dcb TDecisionCube
dcq TDecisionQuery
dcs TDecisionSource
dcp TDecisionPivot
dcg TDecisionGrid
dcgr TDecisionGraph
3.8.2.9 QReport Tab
qr TQuickReport
qrsd TQRSubDetail
qrb TQRBand
qrcb TQRChilnd
qrg TQRGroup
qrl TQRLabel
qrt TQRText
qre TQRExpr
qrs TQRSysData
qrm TQRMemo
qrrt TQRRichText
qrdr TQRDBRichText
qrsh TQRShape
qri TQRImage
qrdi TQRDBMImage
qrcr TQRCompositeReport
qrp TQRPreview
qrch TQRChart
3.8.2.10 Dialogs Tab
OpenDialog TOpenDialog
SaveDialog TSaveDialog
OpenPictureDialog TOpenPictureDialog
SavePictureDialog TSavePictureDialog
FontDialog TFontDialog
ColorDialog TColorDialog
PrintDialog TPrintDialog
PrinterSetupDialog TPrintSetupDialog
FindDialog TFindDialog
ReplaceDialog TReplaceDialog
3.8.2.11 Win31 Tab
dbll TDBLookupList
dblc TDBLookupCombo
ts TTabSet
ol TOutline
tnb TTabbedNoteBook
nb TNoteBook
hdr THeader
flb TFileListBox
dlb TDirectoryListBox
dcb TDriveComboBox
fcb TFilterComboBox
3.8.2.12 Samples Tab
gg TGauge
cg TColorGrid
spb TSpinButton
spe TSpinEdit
dol TDirectoryOutline
cal TCalendar
ibea TIBEventAlerter
3.8.2.13 Tab
cfx TChartFX
vsp TVSSpell
f1b TF1Book
vtc TVTChart
grp TGraph
3.8.2.14 Midas Tab
prv TProvider
cds TClientDataSet
qcds TQueryClientDataSet
dTDCOMConnection
olee TOleEnterpriseConnection
sck TSocketConnection
rms TRemoteServer
mid Tmidannection
4.修改規範
  本規則所做的規定僅適用於已經納入管理的程式。在這類修改中,要求保留修改前的內容、並標識出修改和新增的內容。並在檔案頭加入修改人、修改日期、修改說明等必要的資訊。
4.1修改歷史記錄
  對原始檔進行經過批准的修改時,修改者應在程式檔案頭加入修改歷史項。在以後的每一次修改時,修改者都必須在該專案中填寫下列資訊:
  修改人
  修改時間
  修改原因
  修改說明即如何修改
4.2新增程式碼行
  新增程式碼行的前後應有註釋行說明。
  // 修改人,修改時間,修改說明
  新增程式碼行
  // 修改結束
4.3刪除程式碼行
  刪除程式碼行的前後用註釋行說明。
  //修改人,修改時間,修改說明
  //要刪除的程式碼行(將要刪除的語句進行註釋)
  //修改結束
4.4修改程式碼行
  修改程式碼行以刪除程式碼行後在新增程式碼行的方式進行。
  //修改人,修改時間,修改說明
  //修改前的程式碼行
//修改結束
  //修改後的程式碼行
  修改後的程式碼行
//修改結束


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1007739/,如需轉載,請註明出處,否則將追究法律責任。

相關文章