Delphi代码标准文档

上传人:新** 文档编号:479683453 上传时间:2023-10-01 格式:DOC 页数:22 大小:132KB
返回 下载 相关 举报
Delphi代码标准文档_第1页
第1页 / 共22页
Delphi代码标准文档_第2页
第2页 / 共22页
Delphi代码标准文档_第3页
第3页 / 共22页
Delphi代码标准文档_第4页
第4页 / 共22页
Delphi代码标准文档_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《Delphi代码标准文档》由会员分享,可在线阅读,更多相关《Delphi代码标准文档(22页珍藏版)》请在金锄头文库上搜索。

1、文档供参考,可复制、编制,期待您的好评与关注! Delphi代码标准文档Revision 1.0.0.1版本历史说明日期版本变更说明作者2005-5-8V0.5CV-BOM项目组1.前言 本文档主要是为Delphi开发人员提供一个源代码书写标准,以及程序和文件的命名标准,使他们在编程时有一致格式可遵循。这样,每个编程人员编写的代码能够被其他人理解。 本文档不包含用户界面标准。用户界面标准是独立于其他标准的,并且同样是重要的。2.源程序书写规范2.1.通用源代码格式规则1). 缩进 缩进就是每级间有两个空格。不要在源代码中放置制表符。这是因为,制表符的宽度随着不同的设置和代码管理实用程序(打印、

2、文档及版本控制等)而不同。 通过使用Tools|Environment 菜单,在Environment Options 对话框的General页上,不要选中Use Tab Character 和Optional Fill 复选框,这样,制表符就不会被保存。2). 边距 边距设置为80个字符。源代码一般不会因写一个单词而超过边距,但本规则比较灵活。只要可能,长度超过一行的语句应当用逗号或运算符换行。换行后,应缩进两个字符。3). begin.end 语句begin 语句必须单独占一行。例如,下面第一行是错误的,而第二行正确:for i:=0 to 10 do begin / 错, begin 与

3、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 语句的缩进量相同。4).注释 我们通常使用“.”类型的块注释,以前的“(*.*)”类型的块注释用于临时注释掉暂不使用的代码,从Delphi 2开始支持“/”行注释,如果决定不

4、在支持Delphi 2.0以下的版本,可以使用“/”注释。2.2.Object Pascal语句格式语句书写规范与用法1). 括号 在左括号与下一字符之间没有空格。同样,右括号与前一字符也没有空格。下面的例子演示了正确与不正确的空格。CallProc( Aparameter ); / 错!CallProc(Aparameter); / 正确! 不要在语句中包含多余的括号。在源代码中,括号只有在确实需要时才使用。下面的例子演示了正确与不正确用法:if (I=42) then / 错,括号是多余的if (I=42) or (J=42) then / 正确,必须使用括号2). 保留字和关键字 Obj

5、ect Pascal 语言的保留字和关键字总是完全的小写。下面是Delphi 保留字列表:andarrayasasmbegincaseclassconstconstructordestructordispinterfacedivdodowntoelseendexceptexportsfilefinalizationfinallyforfunctiongotoifimplementationininheritedinitializationinlineinterfaceislabellibrarymodnilnotobjectoforoutpackedprocedureprogramproper

6、tyraiserecordrepeatresourcestringsetshlshrstringthenthreadvartotrytypeunituntilusesvarwhilewithxorprivateprotectedpublicpublishedautomated3). 过程和函数(1). 格式 过程名应当以大写字母开始,且大小写交错以增加可读性。下面是一个不正确的写法:procedure thisisapoorlyformattedroutinename;改成这样写就对了:procedure ThisIsMuchMoreReadableRoutineName;(2). 形参(1)

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

8、串或接口类型的参数不能被过程修改,就应当把形参标以Const 。这样,编译器将以最有效的方式生成代码,保证传递的参数不可变。 如果其他类型的参数希望不被过程所修改,也可以标上Const 。尽管这对效率没有影响,但这给过程的调用者带来了更多的信息。4). 变量(1). 局部变量 局部变量用于过程内部,果需要的话,应当在过程的入口处立即初始化变量。局部的AnsiString 类型的变量自动被初始化为空字符串,局部的接口和dispinterface类型的变量自动被初始化为nil,局部的Variant和OleVariant类型的变量自动被初始化为Unassigned。(2). 全局变量 一般不鼓励使用

9、全局变量。不过,有时候需要用到。即使如此,也应当把全局变量限制在需要的环境中。例如,一个全局变量可能只在单元的实现部分是全局的。 全局数据如果将由许多单元使用,就应移动到一个公用单元里被所有对象使用。全局数据可在声明时直接初始化为一个值。注意,所有全局变量自动进行零初始化,因此,不要将全局变量初始化为诸如0 、nil、或Unassigned等空值。零初始化的全局变量在.EXE文件中不占空间。零初始化的数据保存在虚拟的数据段中,而虚拟数据段只在应用程序启动时才分配内存。非零初始化的全局数据则在.EXE文件中占空间。5). 类型(1). 大小写规则 类型标识符是保留字,应当全部小写。Win32 A

10、PI 类型常常全部大写,并且遵循诸如Windows.pas或其他API单元中关于特定类型名的规则。对于其他变量名,第一个字母应大写,其他字母则大小写交错。下面是一些例子:var MyString: string; / 保留字 WindowsHandle: HWND; / Win32 API 类型 I: Integer; /在System单元中引入的类型标识(2). 浮点型 不鼓励使用Real类型,因为它只是为了与老的Pascal代码兼容而保留的。通常情况下,对于浮点数应当使用Double。Double可被处理器优化,是IEEE定义的标准的数据格式。当需要比Double提供的范围更大时,可以使用

11、Extend。Extend是intel专用的类型,Java不支持。当浮点变量的物理字节数很重要时(可能使用其他语言编写DLL),则应当使用Single。(3).Variant和OleVariant 一般不建议使用Variant和OleVariant。但是,当数据类型只有在运行期才知道时(常常是在COM和数据库应用的程序中),这两个类型对编程就有必要。当进行诸如自动化ActiveX控件的COM编程时,应当使用OleVariant;而对于非COM编程,则应当使用Variant。这是因为,Variant能够有效地保存Delphi的原生字符串,而OleVariant则将所有字符串转换为OLE字符串(即

12、WideChar字符串),且没有引用计数功能。6). 语句(1). If 语句 在if/then/else语句中,最有可能执行的情况应放在then子句中,不太可能的情况放在else子句中。为了避免出现许多if语句,可以使用case语句代替。如果多于5级,不要使用if语句。请改用更清楚的方法。不要在if语句中使用多余的括号。 如果在if语句中有多个条件要测试,应按照计算的复杂程度从右向左排。这样,可以使代码充分利用编译器的短路估算逻辑。例如,如果Condition1比Condition2快,Condition2比Condition3快,则if语句一般应这样构造:if Condition1 and

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

14、句 建议不要使用Exit过程来退出while循环。如果需要的话,应当使用循环条件退出循环。所有对while循环进行初始化的代码应当位于while入口前,且不要被无关的语句隔开。任何业务的辅助工作都应在循环后立即进行。(4). for 语句 如果循环次数是确定的,应当用for语句代替while语句。(5). repeat 语句 repeat语句类似于while循环,且遵循同样的规则。(6). with 语句(1) 概述 with语句应小心使用。要避免过度使用with语句,尤其是在with语句中使用多个对象或记录。例如:with Record1,Record2 do 这些情况很容易迷惑编程人员,且导致调试困难。(2) 格式 with语句也遵循本章关于命名和缩进的规则。7). 结构化异常处理(1). 概述 异常处理主要用于纠正错误和保护资源。这意味着,凡是分配资源的地方,都必须使用try.finally来保证资源得到释放。不过,如果是在单元的初始/结束部分或者对象的构造器/析构器中来分配/释放资源则例外。(2). try.finally的用法 在可能的情况下,每个资源分配应当与try.finally结构匹配,例如,下面代码可能导致错误:SomeClass1 := TSomeClass.Create;SomeClass2 := TSomeClass.Creat

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

最新文档


当前位置:首页 > 行业资料 > 国内外标准规范

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