【网学提醒】:本文主要为网上学习者提供Delphi 程序员代码编写标准指南,希望对需要Delphi 程序员代码编写标准指南网友有所帮助,学习一下吧!
资料包括: 论文(30页8587字) 源码
说明:1序言
开发小组可以在他们所编写的代码中保持一贯的风格。这样做的目的是使在开发小组中的每一个程序员都可以明白其他
程序员的代码。这有助于提高代码编写的可读性和使用的一贯性。
2通用源代码格式规则
2.1缩格
缩格是指在每一级有两个空格。不要在源代码中保留tab字符,这是因为tab字符会随着不同用户的不同设置和不同的资源管理工具(打印、文档、版本控制等)而代表不同的宽度。
你可以通过关闭Environment选项对话框中Editor页上的“Use tab character”和“Optimal fill”检查框(通过Tools|Environment)来禁止保存tab字符。
2.2页边空格
页边空格会被设置成80字符宽。通常,源码不会超出这个边界,但这个方针会有一些弹性。不管是否有可能,那些超出到另一行的语句会在一个逗号或其他操作符之后与前面的语句相连。当一个语句被打断相连时,它应比原来的那一行语句缩进两个字符。
2.3Begin…End 配对
有两种配对方法,但在一个
程序中应该始终使用下面的一种方式,不要两种混用。
2.3.1独行配对
Begin 子句应写在独立的一行。例如,下面第一行是错误的写法而第二行是正确的。
for I := 0 to 10 do begin //正确,begin出现在独立的一行
for I := 0 to 10 do //错误,begin同for在同一行
begin
这个规则的例外是当begin子句的出现是作为一个else子句的一部分-参考例子:
if some statement then
begin
…
end
else begin
someOtherStatement;
end;
end 语句永远出现在独立的一行。
当begin语句不是一个else子句的一部分时,相应的end语句永远缩进到与begin部分相对应的位置。
2.3.2同行配对
这也是很多
程序员采用的,这种配对方法的优点是少一行,显得比较简洁。
if some statement then begin
while true do begin
with a do begin
end
end …
end
3Object Pascal
3.1括号
永远不要在括号与括号之间的字符中间留下空格。下面的例子示范了错误的与正确地使用括号中的空格:
CallProc( Aparameter ); //错误
CallProc(Aparameter); //正确
永远不要在一个语句中使用不必要的括号。括号只应在源代码中需要的地方使用。以下的例子示范了错误和正确的使用:
if (I = 42) then //错误 - 多余的括号
if (I = 42) or (J = 42) then //正确 - 需要括号
3.2保留字和关键字
Object Pascal 保留字和关键字永远是全部小写。
3.3过程和函数(例程)
3.3.1命名/格式化
例程的名字永远应该以大写的字母开头并且中间错落分明以便于可读性。下面是一个不正确格式的过程名称:
procedure thisisapoorlyformattedroutinename;
下面是一个合适的大小写例程名称的例子:
procedure ThisIsMuchMoreReadableRoutineName;
例程的名称应该同它的内容相符。一个会导致某个行为的例程应以动词开头。例如:
procedure FormatHardDrive;
一个用于设置输入参数的例程应以单词set作为前缀,例如:
procedure SetUserName;
一个用来接收某个值的例程应以单词get作为前缀,例如:
procedure GetUserName : string;
3.3.2形式参数
3.3.2.1 格式化
如果有的话,相同类型的形参应合并在一个语句中:
procedure Foo(Param1, Param2, Param3 : Integer; Param4 : string);
3.3.2.2 命名
所有形参的名字应是十分符合它们所代表的意义,特别是应该以传送到例程中的标志符的名称为基础。一个好的参数名称应以字符A为前缀 - 例如:
procedure SomeProc(AUserName : string; AUserAge : integer);
“A”前缀按约定表示该参数的名称是与类类型中的一个属性或域的名称相对应的。
3.3.2.3 参数的排序
下面的形参的顺序重点说明了
注册者调用约定调用的好处。
- 最常用的参数应放在第一位,其它的参数应按从左到右的顺序排列。
- 输入参数列表应放在输出参数列表的左边。
- 将通用的参数放在特殊参数的左边,例如:
procedure SomeProc(APlanet, AContinent, ACountry, AState, ACity)
- 排序有可能有些例外,比如事件的处理。类型为TObject的Sender参数经常放在第一位。
3.3.2.4 常量参数
当一个参数为记录型、数组类型、ShortString、或接口类型并且在例程中不被改变时,这些参数应做上常量标记。这样做会让编译器更加有效率的产生有关这些不改变的参数的代码。
而例程中另外一些非变参数也可常量来传送。尽管这样做没有产生任何效果和提高效率,这将会给调用例程的使用者提供更多的信息。
3.3.2.5名称的冲突
当使用拥有两个名称相同的例程的两个单元时,如果你调用该例程时,在uses子句中排在后面的单元中的例程将会被调用。为了解决这种“在uses子句上的模糊”冲突,要在调用该例程时写上相关的单元的前缀,例如:
sysUtile.FindClose(SR);
或
windows.FindClose(Handle);
3.4变量
3.4.1变量的命名和格式
变量的命名应以使用它们的目的相符
循环控制变量应采用一个单独的字符作为名字,比如 I,J,或K,也可以采用更加有意义的名字,比如 UserIndex。
逻辑变量的名字应能充分表达准确的真或假的意思。
3.4.2局部变量
一个过程中的局部变量应遵循所有其它变量的使用和命名约定。临时变量的取名应合理。
如果必须的话,在一进入例程就应初始化局部变量。局部的AnsiString变量会自动初始化为一个空的字符串。
局部接口和派分接口类型变量将会自动初始化为nil,并且局部变数和ole变数类型变量会自动初始化为Unassigned
3.4.3全局变量的使用
使用全局变量是不推荐的。但是,在某些时候还是必须使用,而且它们也只应在必须使用的时候才使用。在这种时候,你应努力只在一段上下文范围内使用全局变量。例如,一个全局变量只应在一个单元的implemntation部分内是全局的。如果打算在多个单元类使用全局数据,你应将它们移到一个公共的单元中然后被其它所有单元使用。
全局变量可以在var子句中直接初始化为一个值。记住,所有的全局数据会自动初始化为0,因此不要将全局变量初始化为一个“空”值比如 0、nil、’’、Unassigned、等等。这样做的一个理由是因为零-初始化的全局数据在exe文件中不会占据任何空间。零-初始化数据被存储在一个虚拟的数据段,它在应用
程序启动后被分配在一段内存中。非零-初始化的全局数据在硬盘的exe文件占用空间。
目录:1序言1
2通用源代码格式规则1
2.1缩格1
2.2页边空格1
2.3BEGIN…END 配对1
2.3.1独行配对1
2.3.2同行配对2
3OBJECT PASCAL2
3.1括号2
3.2保留字和关键字3
3.3过程和函数(例程)3
3.3.1命名/格式化3
3.3.2形式参数3
3.3.2.1格式化3
3.3.2.2命名4
3.3.2.3参数的排序4
3.3.2.4常量参数4
3.3.2.5名称的冲突4
3.4变量5
3.4.1变量的命名和格式5
3.4.2局部变量5
3.4.3全局变量的使用5
3.5类型6
3.5.1大写约定6
3.5.1.1浮点指针类型6
3.5.1.2枚举类型6
3.5.1.3变数和ole变数类型6
3.5.2结构类型7
3.5.2.1数组类型7
3.5.2.2记录类型7
3.6语句7
3.6.1if 语句7
3.6.2case 语句8
3.6.2.1一般性话题8
3.6.2.2格式8
3.6.3while 语句8
3.6.4for 语句9
3.6.5repeat 语句9
3.6.6with 语句9
3.6.6.1一般话题9
3.6.6.2格式9
3.7结构异常处理9
3.7.1一般话题9
3.7.2try…finally的使用10
3.7.3try…except的使用10
3.7.4try…except…else的使用10
3.8类类型11
3.8.1命名和格式11
3.8.2域11
3.8.2.1命名/格式11
3.8.2.2可视化11
3.8.3方法11
3.8.3.1命名/格式12
3.8.3.2使用静态的方法12
3.8.3.3使用虚拟/动态的方法12
3.8.3.4使用抽象的方法12
3.8.3.5属性存取方法12
3.8.4属性13
3.8.4.1命名/格式13
3.8.4.2使用存取的方法13
4文件13
4.1工程文件13
4.1.1命名13
4.2窗体文件14
4.2.1命名14
4.3数据
模板文件14
4.3.1命名14
4.4远端数据
模板文件14
4.4.1命名14
4.5UNIT文件14
4.5.1通用Unit结构15
4.5.1.1unit的名字15
4.5.1.2uses子句15
4.5.1.3interface部分15
4.5.1.4implementation部分15
4.5.1.5initialization部分15
4.5.2窗体单元16
4.5.2.1命名16
4.5.3数据
模板单元16
4.5.3.1命名16
4.5.4一般目的单元16
4.5.4.1命名16
4.5.5构件单元17
4.5.5.1命名17
4.6文件头17
5窗体和数据
模板17
5.1窗体17
5.1.1窗体类型命名标准17
5.1.2窗体实例命名标准18
5.1.3自动创建窗体18
5.1.4模式窗体实例化函数18
5.2数据
模板19
5.2.1数据
模板命名标准19
5.2.2数据
模板实例命名标准19
6包20
6.1使用运行包和设计包的比较20
6.2文件命名标准20
7构件21
7.1用户自定义构件21
7.2构件单元21
7.3使用注册单元21
7.4构件实例命名约定21
7.5构件的前缀22
7.6STANDARD页22
7.7ADDITIONAL页22
7.8WIN32页23
7.9SYSTEM页23
7.10INTERNET页23
7.11DATA ACCESS页24
7.12DATA CONTROLS页24
7.13DECISION CUBE页24
7.14QREPORT页25
7.15DIALOGS页25
7.16WIN3.1页25
7.17SAMPLES页26
7.18ACTIVEX页26
7.19MIDAS页26