delphi代码编写规范.doc_第1页
delphi代码编写规范.doc_第2页
delphi代码编写规范.doc_第3页
delphi代码编写规范.doc_第4页
delphi代码编写规范.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

预付费组预付费组 delphi 代码编写规范代码编写规范 目录 1.概述概述.1 2.通用源代码格式规则通用源代码格式规则.1 3.过程和函数过程和函数.2 4.变量变量.2 4.1.变量命名及格式.2 4.2.类型.3 5.类类.4 5.1.命名及格式.4 5.2.类中的属性访问(这点可以考虑是否加入).5 6.结构化异常处理结构化异常处理.5 7.元件类型元件类型.5 7.1.元件实例的命名规则.5 8.窗体与对话框类型窗体与对话框类型.6 9.数据模块类型数据模块类型.7 10.文件文件.7 1. 概述概述 本规范是根据网上一些资料整理而来,为了实用,只列出了一些重点。 2. 通用源代码格式规则通用源代码格式规则 1). 缩进缩进 缩进就是每级间有两个空格。一般不要在源代码中放置制表符。这是因为,制表符的 宽度随着不同的设置和代码管理实用程序(打印、文档及版本控制等)而不同。当遇到 begin 或进入判断、循环、异常处理、with 语句、记录类型声明、类声明等的时侯增加一级, 当 遇到 end 或退出判断、循环、异常处理、with 语句、记录类型声明、类声明等的时侯减少 一级。 2). begin.end 语句语句 begin 语句必须单独占一行。例如,下面第一行是错误的,而第二行正确: for i:=0 to 10 do begin / 错, begin 与 f o r 在同一行 for i:=0 to 10 do / 对, begin 在另外一行中 begin 本规则的一个特殊情况是,当 begin 为 else 语句的一部分时,例如: if some statement = then begin . . . end else begin Some Other Statement; end; 注意:end 语句总单独一行。当 begin 不为 else 语句的一部分时,相应的 end 语句与 begin 语句的缩进量相同。 3).注释注释 我们通常使用“.”类型的块注释,用“/”行注释。每个函数、过程和全局变量 (包括模块内全局变量)都必须有注释,函数、过程的参数都必须说明。 4).空格(这个是否可以取消)空格(这个是否可以取消) 在操作符及逻辑判断符号的两端一般要添加空格,例如:I := I + 1;,a and b 等,但添 加括号时不需要空格。例如:if ( a b ) then /错误的用法 If (a b) then /正确的用法 又例如:procedure Test(Param1: integer; Param3: string); 3. 过程和函数过程和函数 (1). 格式格式 过程名应当以大写字母开始,且大小写交错以增加可读性。下面是一个不正确的写法: procedure thisisapoorlyformattedroutinename; 改成这样写就对了: procedure ThisIsMuchMoreReadableRoutineName; (2). 形参形参 所有参数必须是有意义的;并且当参数名称和其它属性名称重了的时候,加一个前缀 A, 例如: procedure SomeProc(AUserName: string; AUserAge: integer); 4. 变量变量 4.1. 变量命名及格式变量命名及格式 (1)命名前缀(这点可以考虑是否要加)命名前缀(这点可以考虑是否要加) 字符串类型 s ? Int i Double d Datetime dt Boolean b TDataset ds TQuery qry 如: var sUsrName : string; 循环控制变量通常使用单一的字符如:i, j, 或 k。 另外使用一个有意义的名字例如: UserIndex ,也是准许的。 首先所有变量必须起有意义的名字,使其它组员可以很容易读懂变量所代表的意义, 变量命名可以采用同义的英文命名,可使用几个英文单词,但每一单词的首字母必须大写。 例如: var sWriteFormat::string; 同时对于一些特定类型可采用一定的简写如下: 指针类型 P 纪录类型 Rec 数组类型 Arr 类 Class (2). 全局变量全局变量 全局数据如果将由许多单元使用,就应移动到一个公用单元里被所有对象使用。全局 数据可在声明时直接初始化为一个值。 尽量不使用全局变量,如必须使用全局变量则必须加前缀G ,同时应在变量名称中 体现变量的类型。例如: GPRecUserCount: point;/名称为 UserCount 的全局变量,其类型为指向一结构的指针但 是在模块内部可以使用全局变量。 所有模块内全局变量必须用所有模块内全局变量必须用F为前缀。为前缀。如果几个模块之间需要进行资料交换,则 需要通过声明属性的方法来实现。例如: type TFormOverdraftReturn = class(TForm) private Private declarations F_sUserName: string; F_iUserCount: 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; 4.2. 类型类型 (1).大小写规则大小写规则 类型标识符是保留字,应当全部小写。Win32 API 类型常常全部大写,并且遵循诸如 Windows.pas 或其他 API 单元中关于特定类型名的规则。对于其他变量名,在加入前缀的 情况下第一个字母应大写,其他字母则大小写交错。下面是一些例子: var sMyString: string; / 保留字 WindowsHandle: HWND; / Win32 API 类型 (2).浮点型浮点型 不鼓励使用 Real 类型,因为它只是为了与老的 Pascal 代码兼容而保留的。通常情况下, 对于浮点数应当使用 Double。当需要比 Double 提供的范围更大时,可以使用 Extend。 (3).枚举类型枚举类型 枚举类型的名字必须有意义并且类型的名字之前要加前缀T 。枚举类型的内容的名 字必须包含枚举类型名称的简写,例如: TSongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB); 枚举类型的变量实例的名称与类型相同,但没有前缀 T ,也可以给变量一个更加特殊名 称,诸如:FavoriteSongTypel、FavoriteSongType2 等等。 (4).数组类型数组类型 数组类型的名字必须有意义并且类型的名字之前要加前缀T 。如果声明一个指向数 组类型的指针必须在该类型的名字之前加前缀P ,例如: type PCycleArray = TCycleArray; TCycleArray = array1100 of integer; (5).记录类型记录类型 记录类型的名字必须有意义并且类型的名字之前要加前缀T 。如果声明一个指向数 组类型的指针必须在该类型的名字之前加前缀P ,例如: type PEmployee = TEmployee; TEmployee = record EmployeeName: string EmployeeRate: Double; end; 5. 类类 5.1. 命名及格式命名及格式 类的名称应当表达出类的用途。一般的类名前要加字母“T” ,如果是接口类那么类名前 要加“I” ,错误异常类的类名前要加“E” ,而类引用类型(Class-reference type)则要在类 名后加“Class” 。例如: type TCustomer = class(TObject); ICustomer = interface; TCustomerClass = class of TCustomer ECustomerException = class(Exception); 类的实例名称通常与类名相同,只不过没有前缀“T” 。 var Customer: TCustomer; 注意:关于元件的命名,请参阅“元件类型” 。 5.2. 类中的属性访问(这点可以考虑是否加入)类中的属性访问(这点可以考虑是否加入) 所有的属性访问方法必须出现在 private 或 protected 中。属性访问方法的命名同函数 和过程的命名另外读方法(reader method)必须使用前缀Get. 写方法(writer method)必须 使用前缀Set 。写方法的参数必须命名为Value ,其类型同所要写的属性相一致。例 如: TSomeClass = class(TObject) private FiSomeField: Integer; protected function GetSomeField: Integer; procedure SetSomeField( Value: Integer); public property SomeField: Integer read GetSomeField write SetSomeField; end; 6. 结构化异常处理结构化异常处理 异常处理主要用于纠正错误和保护资源。这意味着,凡是分配资源的地方,都必须使用 try.finally 来保证资源得到释放。不过,如果是在单元的初始/结束部分或者对象的构造器/ 析构器中来分配/释放资源则例外。 try.except 的用法 如果你希望在发生异常时执行一些任务,可以使用 try.except。不鼓励使用带 else 子句 的 try.except,即 try.except.else 用法。 7. 元件类型元件类型 7.1. 元件实例的命名规则元件实例的命名规则 元件实例的名称应当能够描述其实际意义,这里命名规则使用了一个变更的匈牙利前缀 命名规范。使用前缀而不使用后缀的原因是在搜寻时,在对象检查器和代码探索器中搜寻 构件的名字比搜寻构件的类型更容易。在这个标准中,元件实例名包括两个部分:前缀和 性质标识名。 (1). 元件的前缀 元件的前缀多是表现元件类型的字母缩写。参见下面表中的元件前缀: TActionList, TAction 表示动作的列表项 act TButton, TSpeedButton, TBitBtn 等所有的按钮类 btn TCheckBox, TDBCheckBox 等所有的检查框 chk TRadioButton 单选按钮类 rdo TToolBar 工具条 tb TMainMenu 所有的主菜单类 mm TMainMenuItem 所有的菜单项类 mi TPopupMenu 所有的弹出式菜单类 pm TPopupMenuItem 所有的弹出式菜单项类 pmi TLabel, TStaticText 等所有用来显示的标签类 lbl TPanel 等所有的面板类 pnl TPageControl 等所有的页式控件类 pgc TEdit, TMaskEdit 等所有的单行编辑框类 edt TMemo, TRichEdit 等所有的多行编辑框类 mmo TDrawGrid, TStringGrid 等所有的网格类 grd TAnimate 等所有的动画类 ani TImageList 等所有的图片列表类 il TImage 等图片类 img TChart 图表类 cht TComboBox, TDBComboBox 等所有的下拉式列表框类 cbo TListBox, TDBList 等所有的列表框类 lst TTreeView tv TListView lv THotKey hk TSplitter 等所有的分隔符类 spt TOpenDialog 等所有的对话框元件类 dlg TTable 等所有的数据表类 tbl TQuery 等所有的 SQL 查询类元件 qry TClientDataSet 所有的客户数据集元件 cds TDataSource ds TDatabase db TSockConnection,TDCOMConnection 等连接元件类 con TQuickRep, TFastReport 等所有的报表元件类 rpt TDDEClientConv,TDDEClientItem 等所有的 DDE 元件类 dde TMonthCalendar 等所有的日历类 cal TGroupBox 等控件类 grp 注意:元件的前缀是为了表示出元件的类型,是按钮,还是标签等等,因此没有必要为每 一个特别元件类建立一个元件前缀,如: TMyButton 的元件前缀仍为 btn。 (2). 元件性质标识名 元件性质标识名是元件意图的描述。例如,一个用于关闭窗体的 TButton 元件实例可命 名为 btnClose。一个编辑姓名的元件实例可命名为 edName。 8. 窗体与对话框类型窗体与对话框类型 (1)窗体类型的命名标准窗体类型的命名标准 窗体或对话框类型的名称应当表达出窗体的用途,如果是窗体要加“Tfrm”前缀,如果 是对话框要加“Tdlg” ,后跟描述性名。如果是框架要加“Tframe” ,后跟描述性名。例如, About 窗体类型名称为: TfrmAbout = class(TForm) 主窗体的类型名称为: TfrmMain = class(TForm) 登陆对话框的类型名称为: TdlgLogin = class(TForm) 框架 TframeUserList = class(TFrame) /这是我加的 (2)窗体的标题必须写明,便于查找打开窗体的标题必须写明,便于查找打开 (3)窗体实例的命名标准窗体实例的命名标准 窗体实例的名称与相应的类型名称相同,但没有前缀 T 。例如,前面提到的窗体类型与 实例的名称为: 类型名 实例名 TfrmAbout frmAbout TfrmMain frmMain TfrmCustomerEntry frmCustomerEntry TdlgLogin dlgLogin TframeUserList frameUserList 9. 数据模块类型数据模块类型 (1)数据模块的命名标准数据模块的命名标准 数据模块类型名称应表达出它的用途,且要加前缀“Tdm” ,后跟描述性名称。例如, Customer 数据模块的类型名称为: TdmCustomer

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论