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

Delphi程序設計規范

編輯:Delphi
1.規范簡介
  本規范主要規定Delphi源程序在書寫過程中所應遵循的規則及注意事項。編寫該規范的目的是使公司軟件開發人員的源代碼書寫習慣保持一致。這樣做可以使每一個組員都可以理解其它組員的代碼,以便於源代碼的二次開發記憶系統的維護。

  

  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. Object 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);
  Windows.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 大小寫協議
  保留字的類型名稱必須全部小寫。Win32 API 的類型通常全部大寫,對於其它類型則首字母大寫,其余字母小寫,例如:
  var
  MyString: string; // reserved Word
  WindowHandle: HWND; // Win32 API type
  I: Integer; // type identifIEr 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
  FSomeFIEld: 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(應用程序所在路徑)
  -Db(本地數據庫所在路徑)
  -Doc(文檔所在路徑)
  -Hlp(幫助文件所在路徑)
  -Backup(備份路徑)
  -Tmp(臨時文件路徑)
  3.7.1.2命名
  項目文件必須使用一個有意義的名字。例如: Delphi中系統信息的項目文件被命名為 SysInfo.dpr。
  3.7.2 Form 文件
  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 TStatusBar
  tlb TToolBar
  clb TCoolBar
  3.8.2.4 System Tab 
  tm TTimer
  pb TPaintBox
  mp TMediaPlayer
  olec TOleContainer
  ddcc TDDEClIEntConv
  ddci TDDEClIEntItem
  ddsc TDDEServerConv
  ddsi TDDEServerItem
  3.8.2.5 Internet Tab 
  csk TClIEntSocket
  ssk TServerSocket
  wbd TWebDispatcher
  pp TPageProducer
  tp TQueryTableProducer
  dstp TDataSetTableProducer
  nmdt TNMDayTime
  nec TNMEcho
  nf TNMFinger
  nftp 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 TSimpleMail
  3.8.2.6 Data Access Tab 
  ds TDataSource
  tbl TTable
  qry TQuery
  sp TStoredProc
  db TDataBase
  ssn TSession
  bm TBatchMove
  usql TUpdateSQL
  3.8.2.7 Data Controls Tab 
  dbg TDBGrid
  dbn TDBNavigator
  dbt TDBText
  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 TQRChildBand
  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 ActiveX Tab 
  cfx TChartFX
  vsp TVSSpell
  f1b TF1Book
  vtc TVTChart
  grp TGraph
  3.8.2.14 Midas Tab 
  prv TProvider
  cds TClIEntDataSet
  qcds TQueryClIEntDataSet
  dcom TDCOMConnection
  olee TOleEnterpriseConnection
  sck TSocketConnection
  rms TRemoteServer
  mid TmidasConnection

  4.修改規范
  本規則所做的規定僅適用於已經納入配置管理的程序。在這類修改中,要求保留修改前的內容、並標識出修改和新增的內容。並在文件頭加入修改人、修改日期、修改說明等必要的信息。
  4.1修改歷史記錄
  對源文件進行經過批准的修改時,修改者應在程序文件頭加入修改歷史項。在以後的每一次修改時,修改者都必須在該項目中填寫下列信息:
  修改人
  修改時間
  修改原因
  修改說明即如何修改
  4.2新增代碼行
  新增代碼行的前後應有注釋行說明。
  // 修改人,修改時間,修改說明
  新增代碼行
  // 修改結束
  4.3刪除代碼行
  刪除代碼行的前後用注釋行說明。
  //修改人,修改時間,修改說明
  //要刪除的代碼行(將要刪除的語句進行注釋)
  //修改結束
  4.4修改代碼行
  修改代碼行以刪除代碼行後在新增代碼行的方式進行。
  //修改人,修改時間,修改說明
  //修改前的代碼行
  //修改結束
  //修改後的代碼行
  修改後的代碼行
  //修改結束

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