Delphi开发代码规范(修改).doc

上传人:自*** 文档编号:126062003 上传时间:2020-03-21 格式:DOC 页数:20 大小:1.17MB
返回 下载 相关 举报
Delphi开发代码规范(修改).doc_第1页
第1页 / 共20页
Delphi开发代码规范(修改).doc_第2页
第2页 / 共20页
Delphi开发代码规范(修改).doc_第3页
第3页 / 共20页
Delphi开发代码规范(修改).doc_第4页
第4页 / 共20页
Delphi开发代码规范(修改).doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《Delphi开发代码规范(修改).doc》由会员分享,可在线阅读,更多相关《Delphi开发代码规范(修改).doc(20页珍藏版)》请在金锄头文库上搜索。

1、一、源程序书写规范1.1.通用源代码格式规则1).缩进缩进就是每级间有两个空格。不要在源代码中放置制表符。通过使用Tools|Environment 菜单,在Environment Options 对话框的General页上,不要选中Use Tab Character 和Optional Fill 复选框,这样,制表符就不会被保存。2).边距边距设置为80个字符。只要可能,长度超过一行的语句应当用逗号或运算符换行。换行后,应缩进两个字符。代码行上字符串的长度不要超过255个字符,如果超过换行缩短,否则出现编译错误。3).begin.end 语句begin 语句必须单独占一行。例如:for i:

2、=0 to 10 do begin / 错, begin 与f o r 在同一行for i:=0 to 10 do / 对, begin 在另外一行中begin本规则的一个特殊情况是,当begin 为else 语句的一部分时,例如:if some statement = thenbegin . . .endelse begin Some Other Statement;end;注意:end 语句总单独一行。当begin 不为else 语句的一部分时,相应的end 语句与begin 语句的缩进量相同。1.2.Object Pascal语句格式语句书写规范与用法1). 括号在左括号与下一字符之间没

3、有空格。同样,右括号与前一字符也没有空格。下面的例子演示了正确与不正确的空格。CallProc( Aparameter ); / 错!CallProc(Aparameter); / 正确! 不要在语句中包含多余的括号。在源代码中,括号只有在确实需要时才使用。下面的例子演示了正确与不正确用法:if (I=42) then / 错,括号是多余的if (I=42) or (J=42) then / 正确,必须使用括号2). 保留字和关键字 Object Pascal 语言的保留字和关键字总是完全的小写。3). 过程和函数(1). 格式 过程名应当以大写字母开始,且大小写交错以增加可读性。例如proc

4、edure ThisIsMuchMoreReadableRoutineName;(2). 形参1、格式只要可能,同一类型的形参应当归并在一起:procedure Foo(Param1,Param2,Param3:Imteger;Param4:string);2、参数顺序 形参的顺序主要考虑寄存器调用规则。最常用的参数应当作为第一个参数,按使用频率依次从左到右排。输入参数位于输出参数之前。范围大的参数应当放在范围小的参数之前。例如:SomeProc(aPlanet, aContinent, aCountry, aState, aCity). 有些则例外。例如,在事件处理过程中,TObject 类

5、型的Sender 参数往往是第一个要传递的参数。(3). 常量参数 要使记录、数组、短字符串或接口类型的参数不能被过程修改,就应当把形参标以Const 。4). 变量(1). 局部变量局部变量用于过程内部,如果需要的话,应当在过程的入口处立即初始化变量。局部的AnsiString 类型的变量自动被初始化为空字符串,局部的接口和dispinterface类型的变量自动被初始化为nil,局部的Variant和OleVariant类型的变量自动被初始化为Unassigned。(2). 全局变量 一般不鼓励使用全局变量。应当把全局变量限制在需要的环境中。例如,一个全局变量可能只在单元的实现部分是全局的

6、。 全局数据如果将由许多单元使用,就应移动到一个公用单元里被所有对象使用。全局数据可在声明时直接初始化为一个值。注意,所有全局变量自动进行零初始化,因此,不要将全局变量初始化为诸如0 、nil、或Unassigned等空值。零初始化的全局变量在.EXE文件中不占空间。零初始化的数据保存在虚拟的数据段中,而虚拟数据段只在应用程序启动时才分配内存。5). 类型(1). 大小写规则 类型标识符是保留字,应当全部小写。Win32 API 类型常常全部大写,并且遵循诸如Windows.pas或其他API单元中关于特定类型名的规则。对于其他变量名,第一个字母应大写,其他字母则大小写交错。下面是一些例子:v

7、ar MyString: string; / 保留字 WindowsHandle: HWND; / Win32 API 类型 I: Integer; /在System单元中引入的类型标识(2). 浮点型 不鼓励使用Real类型,因为它只是为了与老的Pascal代码兼容而保留的。通常情况下,对于浮点数应当使用Double。 (3).Variant和OleVariant 一般不建议使用Variant和OleVariant。但是,当数据类型只有在运行期才知道时(常常是在COM和数据库应用的程序中),这两个类型对编程就有必要。当进行诸如自动化ActiveX控件的COM编程时,应当使用OleVarian

8、t;而对于非COM编程,则应当使用Variant。这是因为,Variant能够有效地保存Delphi的原生字符串,而OleVariant则将所有字符串转换为OLE字符串(即WideChar字符串),且没有引用计数功能。6). 语句(1). If 语句 在if/then/else语句中,最有可能执行的情况应放在then子句中,不太可能的情况放在else子句中。为了避免出现许多if语句,可以使用case语句代替。 如果在if语句中有多个条件要测试,应按照计算的复杂程度从右向左排。这样,可以使代码充分利用编译器的短路估算逻辑。例如,如果Condition1比Condition2快,Condition

9、2比Condition3快,则if语句一般应这样构造:if Condition1 and Condition2 and Condition3 then 如果Condition3为False的机会很大,利用短路估算逻辑,我们也可以将Condition3放在最前面:if Condition3 and Condition1 and Condition2 then(2). case 语句(1) 概述 case语句中每种情况的常量应当按数字或字母的顺序排列。每种情况的动作语句应当简短且通常不超过4 - 5 行代码。如果动作太复杂,应将代码单独放在一个过程或函数中。Case语句的else子句只用于默认情况

10、或错误检测。(2) 格式 case语句遵循一般的缩进和命名规则。(3). while 语句 建议不要使用Exit过程来退出while循环。如果需要的话,应当使用循环条件退出循环。所有对while循环进行初始化的代码应当位于while入口前,且不要被无关的语句隔开。任何业务的辅助工作都应在循环后立即进行。(4). for 语句 如果循环次数是确定的,应当用for语句代替while语句。(5). repeat 语句 repeat语句类似于while循环,且遵循同样的规则。(6). with 语句(1) 概述 with语句应小心使用。要避免过度使用with语句,尤其是在with语句中使用多个对象或记

11、录。例如:with Record1,Record2 do 这些情况很容易迷惑编程人员,且导致调试困难。(2) 格式 with语句也遵循本章关于命名和缩进的规则。7). 结构化异常处理(1). 概述凡是分配资源的地方,都必须使用try.finally来保证资源得到释放。不过,如果是在单元的初始/结束部分或者对象的构造器/析构器中来分配/释放资源则例外。(2). try.finally的用法 在可能的情况下,每个资源分配应当与try.finally结构匹配,但有时如果有许多类都需要同时创建,建议使用下述的一个安全方案:SomeClass1 := nil;SomeClass2 := nil;try

12、SomeClass1 := TSomeClass.Create;SomeClass2 := TSomeClass.Create; do some code finally FreeAndNil(SomeClass1); FreeAndNil(SomeClass2);end;(3). try.except的用法 如果你希望在发生异常时执行一些任务,可以使用try.except。通常,没有必要为了简单地显示一个错误信息而使用try.except,因为Application对象能够自动根据上下文做到这一点。如果要在子句中激活默认的异常处理,可以再次触发异常。(4). try.except.else的

13、用法 不鼓励使用带else子句的try.except,因为这将阻塞所有的异常,包括你没有准备处理的异常。二、命名规范首先,命名要有一定的意义,表示一定的用途。2.1.过程(Procedure)与函数(Function)1).命名进行一个动作的过程最好在名称前加上表示动作的动词为前缀。函数或过程体由与函数或过程含义相同或相近的英文单词或其缩写组成,但只允许使用其中一种方式(英文/拼音),每个单词的首字符要大写,缩写的要全部大写。例如:procedure FormatHardDrive; 设置输入参数值的过程名应当以Set 为其前缀,例如:procedure SetUserName; 获取数值的过

14、程名应当以Get 为其前缀,例如:function GetUserName:string;2).形参如果合适的话,形参的名称最好以字母A 为前缀,输入变量名(参数)的定义使用与此变量相同或相近的英文单词或英文缩写,如果没有可用的英文可使用汉语拼音,当使用单词时单词的首字符要大写,使用缩写或汉语拼音时要全部大写。例如:procedure SomeProc(AUserName:string; AUserAge:integer);当参数名与类的特性或字段同名时,前缀A 就有必要了。3).命名冲突 当两个单元中含有相同名称的过程时,如果调用该过程,实际被调用的是Uses 子句中较后出现的那个单元中的过

15、程。为避免这种情况,可在方法名前加想要的单元名,例如:SysUtils.FindClose(SR);或Windows.FindClose(Handle);4).注释说明在函数或过程定义时要简单说明函数或过程的作用;在实现部分前面要以以下格式加注释: -名称:(写此函数名)作者:(写程序员名字)时间:(写函数建立时间)功能:(较详细地描述此函数的功能)输入:(列出每一变量的名称、类型及其含义或作用如果一个变量有多个固定的值代表不同作用要分别列出每个值的意义)输出:(要说明输出变量的类型、含义,如果输出是一系列固定的值时要说明每个输出值的含义)日志:(此为修改日志,在开发时无需书写任何内容,在开发结束后进行修改时要以以下格式书写:序号、修改人;修改时间;修改内容;修改原因)-

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 规章制度

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号