delphi编码规范文档.docx
- 文档编号:2403365
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:19
- 大小:27.50KB
delphi编码规范文档.docx
《delphi编码规范文档.docx》由会员分享,可在线阅读,更多相关《delphi编码规范文档.docx(19页珍藏版)》请在冰豆网上搜索。
delphi编码规范文档
delphi编码规范文档
目录
1、前言2
2、源程序书写规范2
2.1通用源代码格式规范2
2.1.1缩进2
2.1.2边距2
2.1.3Begin…End语句2
2.1.4注释3
2.2OBJECTPASCAL语句格式书写规范与用法3
2.2.1括号3
2.2.2保留字和关键字3
2.2.3过程和函数4
2.2.4变量4
2.2.5类型5
2.2.6语句5
2.2.7结构化异常处理6
3命名规范7
3.1过程(PROCEDURE)与函数(FUNCTION)7
3.1.1命名7
3.1.2形参7
3.1.3命名冲突7
3.2变量(VARIABLE)7
3.2.1局部变量8
3.2.2全局变量8
3.3类型(TYPE)8
3.3.1一般类型8
3.3.2构造类型8
3.3.3类类型(Class)9
3.3.4元件类型10
3.3.5窗体和对话框类型11
3.3.6数据模块类型13
3.4文件13
3.4.1项目文件14
3.4.2窗体文件14
3.4.3数据模块文件14
3.4.4远程数据模块文件14
3.4.5单元文件14
1、前言
本文档主要是为Delphi开发人员提供一个源代码书写标准,以及程序和文件的命名标准,使他们在编程时有一致格式可遵循。
这样,每个编程人员编写的代码能够被其他人理解。
注:
本文档不包含用户界面标准。
用户界面标准是独立于其他标准的,并且同样是重要的。
2、源程序书写规范
2.1通用源代码格式规范
2.1.1缩进
缩进就是每级间有两个空格。
不要在源代码中放置制表符。
这是因为,制表符的宽度随着不同的设置和代码管理实用程序(打印、文档及版本控制等)而不同。
通过使用Tools|EditorOptions菜单,在EditorOptions对话框的General页上,设定TabStops为2;同时不要选中UseTabCharacter和OptionalFill复选框,这样制表符就不会被保存。
2.1.2边距
边距设置为80个字符。
源代码一般不会因写一个单词而超过边距,但本规则比较灵活。
只要可能,长度超过一行的语句应当用逗号或运算符换行。
换行后,应缩进两个字符。
2.1.3Begin…End语句
begin语句必须单独占一行。
例如,下面第一行是错误的,而第二行正确:
fori:
=0to10dobegin//错,begin与for在同一行
fori:
=0to10do//对,begin在另外一行中
begin
本规则的一个特殊情况是,当begin为else语句的一部分时,例如:
ifsomestatement=then
begin
...
end
elsebegin
SomeOtherStatement;
end;
注意:
end语句总单独一行。
当begin不为else语句的一部分时,相应的end语句与begin语句的缩进量相同。
2.1.4注释
我们通常使用“{...}”类型的块注释,以前的“(*...*)”类型的块注释用于临时注释掉暂不使用的代码,从Delphi2开始支持“//”行注释,如果决定不在支持Delphi2.0以下的版本,可以使用“//”注释。
2.2ObjectPascal语句格式书写规范与用法
2.2.1括号
在左括号与下一字符之间没有空格。
同样,右括号与前一字符也没有空格。
下面的例子演示了正确与不正确的空格。
CallProc(Aparameter);//错!
CallProc(Aparameter);//正确!
不要在语句中包含多余的括号。
在源代码中,括号只有在确实需要时才使用。
下面的例子演示了正确与不正确用法:
if(I=42)then//错,括号是多余的
if(I=42)or(J=42)then//正确,必须使用括号
2.2.2保留字和关键字
ObjectPascal语言的保留字和关键字总是完全的小写。
下面是Delphi5保留字列表:
andarrayasasm
begincaseclassconst
constructordestructordispinterfacediv
dodowntoelseend
exceptexportsfilefinalization
finallyforfunctiongoto
ifimplementationininherited
initializationinlineinterfaceis
labellibrarymodnil
notobjectofor
outpackedprocedureprogram
propertyraiserecordrepeat
resourcestringsetshlshr
stringthenthreadvarto
trytypeunituntil
usesvarwhilewith
xorprivateprotectedpublic
publishedautomated
2.2.3过程和函数
□格式
过程名应当以大写字母开始,且大小写交错以增加可读性。
下面是一个不正确的写法:
procedurethisisapoorlyformattedroutinename;
改成这样写就对了:
procedureThisIsMuchMoreReadableRoutineName;
□形参
●格式
只要可能,同一类型的形参应当归并在一起:
procedureFoo(Param1,Param2,Param3:
Integer;Param4:
string);
●参数顺序
形参的顺序主要要考虑寄存器调用规则。
最常用的参数应当作为第一个参数,按使用频率依次从左到右排。
输入参数位于输出参数之前。
范围大的参数应当放在范围小的参数之前。
例如:
SomeProc(aPlanet,aContinent,aCountry,aState,aCity).
有些则例外。
例如,在事件处理过程中,TObject类型的Sender参数往往是第一个要传递的参数。
●常量参数
要使记录、数组、短字符串或接口类型的参数不能被过程修改,就应当把形参标以Const。
这样,编译器将以最有效的方式生成代码,保证传递的参数不可变。
如果其他类型的参数希望不被过程所修改,也可以标上Const。
尽管这对效率没有影响,但这给过程的调用者带来了更多的信息。
2.2.4变量
□局部变量
局部变量用于过程内部,如果需要的话,应当在过程的入口处立即初始化变量。
局部的AnsiString类型的变量自动被初始化为空字符串,局部的接口和dispinterface类型的变量自动被初始化为nil,局部的Variant和OleVariant类型的变量自动被初始化为Unassigned。
□全局变量
一般不鼓励使用全局变量。
不过,有时候需要用到。
即使如此,也应当把全局变量限制在需要的环境中。
例如,一个全局变量可能只在单元的实现部分是全局的。
全局变量如果将由许多单元使用,就应移动到一个公用单元里被所有对象使用。
全局变量可在声明时直接初始化为一个值。
注意,所有全局变量自动进行零初始化,因此,不要将全局变量初始化为诸如0、nil、或Unassigned等空值。
零初始化的全局变量在.EXE文件中不占空间。
零初始化的数据保存在虚拟的数据段中,而虚拟数据段只在应用程序启动时才分配内存。
非零初始化的全局数据则在.EXE文件中占空间。
2.2.5类型
□大小写规则
类型标识符是保留字,应当全部小写。
Win32API类型常常全部大写,并且遵循诸如Windows.pas或其他API单元中关于特定类型名的规则。
对于其他变量名,第一个字母应大写,其他字母则大小写交错。
下面是一些例子:
Var
MyString:
string;//保留字
WindowsHandle:
HWND;//Win32API类型
I:
Integer;//在System单元中引入的类型标识
□浮点型
不鼓励使用Real类型,因为它只是为了与老的Pascal代码兼容而保留的。
通常情况下,对于浮点数应当使用Double。
Double可被处理器优化,是IEEE定义的标准的数据格式。
当需要比Double提供的范围更大时,可以使用Extend。
Extend是intel专用的类型,Java不支持。
当浮点变量的物理字节数很重要时(可能使用其他语言编写DLL),则应当使用Single。
□Variant和OleVariant
一般不建议使用Variant和OleVariant。
但是,当数据类型只有在运行期才知道时(常常是在COM和数据库应用的程序中),这两个类型对编程就有必要。
当进行诸如自动化ActiveX控件的COM编程时,应当使用OleVariant;而对于非COM编程,则应当使用Variant。
这是因为,Variant能够有效地保存Delphi的原生字符串,而OleVariant则将所有字符串转换为OLE字符串(即WideChar字符串),且没有引用计数功能。
2.2.6语句
□IF语句
在if/then/else语句中,最有可能执行的情况应放在then子句中,不太可能的情况放在else子句中。
为了避免出现许多if语句,可以使用case语句代替。
如果多于5级,不要使用if语句。
请改用更清楚的方法。
不要在if语句中使用多余的括号。
如果在if语句中有多个条件要测试,应按照计算的复杂程度从右向左排。
这样,可以使代码充分利用编译器的短路估算逻辑。
例如,如果Condition1比Condition2快,Condition2比Condition3快,则if语句一般应这样构造:
ifCondition1andCondition2andCondition3then
如果Condition3为False的机会很大,利用短路估算逻辑,我们也可以将Condition3放在最前面:
ifCondition3andCondition1andCondition2then
□Case语句
case语句中每种情况的常量应当按数字或字母的顺序排列。
每种情况的动作语句应当简短且通常不超过4-5行代码。
如果动作太复杂,应将代码单独放在一个过程或函数中。
Case语句的else子句只用于默认情况或错误检测。
case语句遵循一般的缩进和命名规则。
□While语句
建议不要使用Exit过程来退出while循环。
如果需要的话,应当使用循环条件退出循环。
所有对while循环进行初始化的代码应当位于while入口前,且不要被无关的语句隔开。
任何业务的辅助工作都应在循环后立即进行。
□For语句
如果循环次数是确定的,应当用for语句代替while语句。
□Repeat语句
repeat语句类似于while循环,且遵循同样的规则。
□With语句
with语句应小心使用。
要避免过度使用with语句,尤其是在with语句中使用多个对象或记录。
例如:
withRecord1,Record2do这些情况很容易迷惑编程人员,且导致调试困难。
with语句也遵循本章关于命名和缩进的规则。
2.2.7结构化异常处理
□概述
异常处理主要用于纠正错误和保护资源。
这意味着,凡是分配资源的地方,都必须使用try...finally来保证资源得到释放。
不过,如果是在单元的初始
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- delphi 编码 规范 文档