欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap FreeTalk
   您现在位于: 首页技术专栏开发语言 → 正文
Delphi编码规范
06-05-13 14:19:28 作者:supergis 出处:

[转帖]

1. 一般的源代码格式规则 2
1.1 缩进 2
1.2 空格 2
1.3 边距 2
1.4 颜色及文字属性 2
1.5 begin···end 2
2. OBJECT PASCAL 3
2.1 括号 3
2.2 保留字和关键字 3
2.3 过程和函数(例程) 3
2.4 变量 4
2.5 常量(const) 5
2.6 资源串(resourcestring) 5
2.7 类型 5
2.8 构造类型 6
2.9 语句 6
2.10 结构化异常处理 8
2.11 类 8
3. 文件 10
3.1 项目文件 10
3.2 Form文件 10
3.3 数据模块文?10
3.4 远程数据模块文件 10
3.5 单元文件 10
3.6 文件头 11
3.7 函数或过程头格式如下 11
4. Form与数据模块 12
4.1 Form 12
4.2 数据模块 13
5. 包 14
5.1 运行期包与设计期包 14
5.2 文件命名标准 14
6. 元件 14
6.1 自定义的元件 14
6.2 元件实例的命名规则 15
6.3 元件性质标识名 15
6.4 元件的前缀 15


1. 一般的源代码格式规则
1.1 缩进
缩进就是每级间有两个空格。不要在源代码中保存制表符。这是因为,制表符的宽度随着不同的用户设置和代码管理实用程序(打印、文档及版本控制等)而不同。
通过使用Tools | Editor Options菜单,在Editor Properties对话框的General页上,不要选中Use tab Character和Optimal Fill复选框,这样,制表符就不会被保存。
1.2 空格
遇到如下情况,需要添加空格:
1) 逗号的后面;
2) 冒号的后面;
3) 等号的前后;
4) 赋值号的前后
5) 运算符(+、-、*、/)的前后。
1.3 边距
边距设置为80个字符。源代码一般不会因写一个单词而超过边距,但本规则比较灵活。只要可能,长度超过一行的语句应当用逗号或运算符换行。换行后,应缩进两个字符。
1.4 颜色及文字属性
通过使用Tools | Editor Options菜单,在Editor Properties对话框的Color页上,设置相应元素的颜色及文字属性。其中:
注释(Comment): 斜体深绿色
保留字(Reserved word): 粗体天蓝色
字符串(String): 普通洋红色
数值(Number): 普通红色
其他元素取Delphi IDE缺省设置。
1.5 begin···end
begin语句必须单独占一行,例如,下面第一行是错误的,而第二行正确:
for i := 0 to l0 do begin // 错, begin与for在同一行
for i := 0 to 10 do // 对, begin在另外一行中
begin
end;

本规则的一个特殊情况是,当begin为else语句的一部分时,例如:

if some statement = then
begin
...
end
else begin
SomeOtherStatement;
end;

end语句总是单独一行。
当begin不为else语句的一部分时,相应的end语句与begin语句的缩进量相同。
2. OBJECT PASCAL
2.1 括号
在左括号与下一个字符之间没有空格。同样,右括号与前一字符间也没有空格。下面的例于演示了正确与不正确的空格。

CallProc( AParameter ); // 错!
CallProc(AParameter); // 正确!

不要在语句中包含多余的括号。在源代码中,括号只有在确实需要时才使用。下面的例子演示了正确与不正确用法:
if (i = 42) then // 错,括号是多余的
if (i = 42)or (j = 42) then // 正确,必须使用括号
2.2 保留字和关键字
Object Pascal语言的保留字和关键字总是全部小写。
2.3 过程和函数(例程)
2.3.1 命名与格式
■ 例程名应当以大写字母开始,且大小写交错以增加可读性。
下面是一个不正确的写法:
procedure thisisapoorlyformattedroutinename;
改成这样写就对了:
procedure ThisIsMuchMoreReadableRoutineName;
■ 例程名应当有意义。进行一个动作的例程最好在名称前加上表示动作的动词为前缀。
例如:
procedure FormatHardDrive;
■ 设置输入参数值的例程名应当以Set为其前缀,例如:
procedure SetUserName;
■ 获取数值的例程名应当以Get为其前缀,例如:
function GetUserName: string;
2.3.2 形参
■ 格式
只要可能,同一类型的形参应当归并在一起:
procedureFoo(Param1, Param2,Param3: Integer; Param4: string);
■ 命名
所有形参的名称都应当表达出它的用途。如果合适的话,形参的名称最好以字母A为前缀,例如:
procedure SomeProc(AuserName: string; AuserAge: integer);
当参数名与类的特性或字段同名时,前缀A就有必要了。
■ 参数顺序
形参的顺序主要要考虑寄存器调用规则。
最常用的参数应当作为第一个参数,按使用频率依次从左到右排。
输入参数位于输出参数之前。
范围大的参数应当放在范围小的参数之前。例如:
SomeProc(AP1anet, AContinent, ACountry, AState, ACity);
有些则例外。例如,在事件处理句柄中,TObject类型的Sender参数往往是第一个要传递的参数。
■ 常量参数
要使记录、数组、短字符串或接口类型的参数不能被例程修改,就应当把形参标以const。这样,编译器将以最有效的方式生成代码,保证传递的参数不可变。
如果其他类型的参数希望不被例程所修改,也可以标上const。尽管这对效率没有影响,但这给例程的调用者带来了更多的信息。
■ 命名冲突
当两个单元中含有相同名称的例程时,如果调用该例程,实际被调用的是uses子句中最后出现的那个单元中的例程。为避免这种情况,可在方法名前加想要的单元名,例如:
SysUtils.FindClose(SR);

Windows.FindClose(Handle)
2.4 变量
2.4.1 变量的命名与格式
变量的名称应当能够表达出它的用途。
循环控制变量常常为单个字母,诸如I、J或K。也可以使用更有意义的名称,例如UserIndex。布尔变量名必须能清楚表示出True和False值的意义。
2.4.2 局部变量
局部变量用于例程内部,遵循其他变量的命名规则。
局部变量加前缀l_(循环控制变量除外),如l_UserName。
如果需要的话,应当在例程的入口处立即初始化变量。局部的AnsiString类型的变量自动被初始化为空字符串,局部的接口和调度接口类型的变量自动被初始化为nil,局部的Variant和OleVariant类型的变量自动被初始化为Unassigned。
2.4.3 全局变量
一般不鼓励使用全局变量。不过,有时候需要用到。即使如此,也应当把全局变量限制在需要的环境中。例如,一个全局变量可能只在单元的Implementation部分是全局的。
全局数据如果将由许多单元使用,就应移动到一个公用单元里被所有对象使用。
全局数据可在声明时直接初始化为一个值。注意,所有全局变量自动进行零初始化,因此,不要将全局变量初始化为诸如0、nil、’’或Unassigned等空值。零初始化的全局变量在.EXE文件中不占空间。零初始化的数据保存在虚拟的数据段中,而虚拟数据段只在应用程序启动时才分配内存。非零初始化的全局数据则在.EXE文件中占空间。
2.5 常量(const)
常量的命名应当能够表达出它的用途。
如果有类别,该类别的所有常量加前缀,前缀为类别缩写的小写字母;例如:对于文件打开方式(File Open Modes),定义常量:
fmOpenRead = $0000;
fmOpenWrite = $0001;
如果无类别,常量的前缀为con。例如:conProductName = ‘GBG2000’;
2.6 资源串(resourcestring)
如果在模块中有提示信息类的字符串,把该字符串定义为资源串。
资源串的命名应当能够表达出它的用途。
如果有类别,该类别的所有资源串加前缀,前缀为类别缩写的小写字母,同常量定义。
如果无类别,资源串的前缀为rs。例如:rsFileOpenError = ‘文件打开失败 !’;
2.7 类型
2.7.1 大小写规则
类型标识符是保留字,应当全部小写。Win32 API类型常常全部大写,并且遵循诸如Windows.pas或其他API单元中关于特定类型名的规则。对于其他变量名,第一个字母应大写,其他字母则大小写交错。
下面是一些例子:
var
Mytring: string; // 保留字
WindowsHandle: HWND; // Win32 API 类型
i: Integer; // 在System单元中介绍的类型标识
2.7.2 浮点型
不鼓励使用Real类型,因为它只是为了与老的Pascal代码兼容而保留的。通常情况下对于浮点数应当使用Double。Double可被处理器优化,是IEEE定义的标准的数据格式。当需要比Double提供的范围更大时,可以使用Extend。Extend是Intel专用的类型,Java不支持。当浮点变量的物理字节数很重要时(可能使用其他语言编写的DLL),则应当使用Single。
2.7.3 枚举型
枚举类型名必须代表枚举的用途。名称前要加T字符作为前缀,表示这是个数据类型。枚举类型的标识符列表的前缀应包含2~3个小写字符,来彼此关联。例如:
TSongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMeta1, stRB);
枚举类型的变量实例的名称与类型相同,但没有前缀T,除非为了给变量一个更加特殊的名称,诸如FavoriteSongType1、FavoriteSongType2等。
2.7.4 Variant和OleVariant
一般不建议使用Variant和OleVariant。但是,当数据类型只有在运行期才知道时(常常是在COM和数据库应用程序中),这两个类型对编程就有必要。当进行诸如Automation、ActiveX控件的COM编程时,应当使用0leVariant;而对于非COM编程,则应当使用Variant。这是因为,Variant能够有效地保存Delphi的原生字符串,而OleVariant则将所有字符串转换为OLE字符串(即WideChar字符串),且没有引用计数功能。
2.8 构造类型
2.8.1 数组类型
数组类型名应表达出该数组的用途。类型名必须加字母T为前缀。如果要声明一个指向数组类型的指针,则必须加字母P为前缀,且声明在类型声明之前。例如:
type
PCycleArray = ^TCycleArray;
TCycleArray = array[1..100] of integer;
实际上,数组类型的变量实例与类型名称相同,但没有T前缀。
2.8.2 记录类型
记录类型名应表达出记录的用途。类型名必须加字母T为前缀。如果要声明一个指向记录类型的指计,则必须加字母P为前缀,且其声明在类型声明之前。例如:
type
PEmployee = ^TEmployee;
TEmployee = record
EmployeeName: string;
EmployeeRate: Double;
end;
2.9 语句
2.9.1 if语句
在if/then/else语句中,最有可能执行的情况应放在then子句中,不太可能的情况放在else子句中。
为了避免出现许多if语句,可以使用case语句代替。
如果多于5级,不要使用if语句。请改用更清楚的方法。
不要在if语句中使用多余的括号。
如果在if语句中有多个条件要测试,应按照计算的复杂程度从右向左排。这样,可以使代码充分利用编译器的短路估算逻辑。例如,如果Conditionl比Condition2快,Condition2比Condition3快,则if语句应这样构造:
if Condition1 and Condition2 and Condition3 then
如果无else子句且执行语句只有一句,该执行语句写在then后,例如:
if Condition then do some thing;
2.9.2 case语句
■ 概述
case语句中每种情况常量应当按数字或字母的顺序排列。
每种情况的动作语句应当简短且通常不超过4~5行代码。如果动作太复杂,应将代码单独放在一个过程或函数中。
case语句的else子句只用于默认情况或错误检测。
■ 格式
case语句遵循其他一般的缩进和命名规则。
2.9.3 while语句
建议不要使用Exit过程来退出whi1e循环。如果需要的话,应当使用循环条件退出循环。
所有对while循环进行初

9 7 3 1 2 3 4 8 :

(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  

    关于我们友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
     
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.
     

                   滇ICP备05006901号