转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
Delphi程序员代码编写标准指南         ★★★★

Delphi程序员代码编写标准指南

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2379 更新时间:2009/4/23 18:42:42

Delphi 4 程序员代码编写标准指南
版权所有 1998 Xavier Perched和 Steve Teiseira

一、序言
二、通用源代码格式规则
2.1 缩格
2.2 页边空格
2.3 Begin…End 配对
三、Object Pascal
3.1 括号
3.2 保留字和关键字
3.3 过程和函数(例程)
    3.3.1 命名/格式化
    3.3.2 形式参数
        3.3.2.1 格式化
        3.3.2.2 命名
        3.3.2.3 参数的排序
        3.3.2.4 常量参数
        3.3.2.5 名称的冲突
3.4 变量
    3.4.1 变量的命名和格式
    3.4.2 局部变量
    3.4.3 全局变量的使用
3.5 类型
    3.5.1 大写约定
        3.5.1.1 浮点指针类型
        3.5.1.2 枚举类型
        3.5.1.3 变数和ole变数类型
    3.5.2 结构类型
        3.5.2.1 数组类型
        3.5.2.2 记录类型
3.6 语句
    3.6.1 if 语句
    3.6.2 case 语句
        3.6.2.1 一般性话题
        3.6.2.2 格式
    3.6.3 while 语句
    3.6.4 for 语句
    3.6.5 repeat 语句
    3.6.6 with  语句
        3.6.6.1 一般话题
        3.6.6.2 格式
3.7 结构异常处理
    3.7.1 一般话题
    3.7.2 try…finally的使用
    3.7.3 try…except的使用
    3.7.4 try…except…else的使用
3.8 类类型
    3.8.1 命名和格式
    3.8.2 域
        3.8.2.1 命名/格式
        3.8.2.2 可视化
    3.8.3 方法
        3.8.3.1 命名/格式
        3.8.3.2 使用静态的方法
        3.8.3.3 使用虚拟/动态的方法
        3.8.3.4 使用抽象的方法
        3.8.3.5 属性存取方法
    3.8.4 属性
        3.8.4.1 命名/格式
        3.8.4.2 使用存取的方法
四、文件
4.1 工程文件
    4.1.1 命名
4.2 窗体文件
    4.2.1 命名
4.3 数据模板文件
    4.3.1 命名
4.4 远端数据模板文件
    4.4.1 命名
4.5 Unit文件
    4.5.1 通用Unit结构
        4.5.1.1 unit的名字
        4.5.1.2 uses子句
        4.5.1.3 interface部分
        4.5.1.4 implementation部分
        4.5.1.5 initialization部分
        4.5.1.6 finalization部分
    4.5.2 窗体单元
        4.5.2.1 命名
    4.5.3 数据模板单元
        4.5.3.1 命名
    4.5.4 一般目的单元
        4.5.4.1 命名
    4.5.5 构件单元
        4.5.5.1 命名
4.6 文件头
五、窗体和数据模板
5.1 窗体
    5.1.1 窗体类型命名标准
    5.1.2 窗体实例命名标准
    5.1.3 自动创建窗体
    5.1.4 模式窗体实例化函数
5.2 数据模板
    5.2.1 数据模板命名标准
    5.2.2 数据模板实例命名标准
六、包
6.1 使用运行包和设计包的比较
6.2 文件命名标准
七、构件
7.1 用户自定义构件
7.2 构件单元
7.3 使用注册单元
7.4 构件实例命名约定
7.5 构件的前缀
7.6 Standard页
7.7 Additional页
7.8 Win32页
7.9 System页
7.10 Internet页
7.11 Data Access页
7.12 Data Controls页
7.13 Decision Cube页
7.14 QReport页
7.15 Dialogs页
7.16 Win3.1页
7.17 Samples页
7.18 ActiveX页
7.19 Midas页

一、序言

本文档详述了在Delphi 4开发者指南下进行编程的代码编写标准。在通常情况下,本文档遵循“取消”式格式的指引方针,该方针由Borland国际通过一些例外来使用。在Delphi 4开发者指南中包含本文档的目的在于阐述一种方法,通过该方法,开发小组可以在他们所编写的代码中保持一贯的风格。这样做的目的是使在开发小组中的每一个程序员都可以明白其他程序员的代码。这有助于提高代码编写的可读性和使用的一贯性。

本文档并不意味着包含了所有存在于代码中的标准。但是,它的内容已足够帮你起个好头。你可以自由的增加修改这些标准来满足你的需要。我们不赞成你偏离这些由Borland开发人员所使用的标准太远。我们推荐这么做是因为一旦有新的程序员加入到你的开发小组中,而他们最喜欢和最熟悉的是Borland的标准。象大多数代码标准文档,本文档也会根据需要进行改动。因此,你可以到www.xapware.com/ddg中找到最新的更新版本。本文档不包括用户接口标准。本文档是独立的但也是同样重要的。已经有足够的第三方书籍和Microsoft文档包括了另外一些指导方针,而我们决定并不复制这些信息,但我们会指引你到Microsoft Developers Network 和一些资源,在那儿可以找到你所需的信息。

二、通用源代码格式规则

2.1 缩格

缩格是指在每一级有两个空格。不要在源代码中保留tab字符,这是因为tab字符会随着不同用户的不同设置和不同的资源管理工具(打印、文档、版本控制等)而代表不同的宽度。

你可以通过关闭Environment选项对话框中Editor页上的“Use tab character”和“Optimal fill”检查框(通过Tools|Environment)来禁止保存tab字符。

2.2 页边空格

页边空格会被设置成80字符宽。通常,源码不会超出这个边界,但这个方针会有一些弹性。不管是否有可能,那些超出到另一行的语句会在一个逗号或其他操作符之后与前面的语句相连。当一个语句被打断相连时,它应比原来的那一行语句缩进两个字符。

2.3 Begin…End 配对

Begin 子句应写在独立的一行。例如,下面第一行是错误的写法而第二行是正确的。
for I := 0 to 10 do begin  //错误,begin同for在同一行
for I := 0 to 10 do        //正确,begin出现在独立的一行
begin

这个规则的例外是当begin子句的出现是作为一个else子句的一部分-参考例子:
if some statement then
begin
  …
end
else begin
  someOtherStatement;
end;

end 语句永远出现在独立的一行。
当begin语句不是一个else子句的一部分时,相应的end语句永远缩进到与begin部分相对应的位置。

三、Object 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文件占用空间。

3.5 类型

3.5.1 大写约定

如果类型的名字是保留字,那么它应全部小写。Win32 API类型通常全部大写,并且你必须遵循在Windows.pas或其他API单元中的详细类型名称的约定。对于其他变量名字,地一个字母应为大写,而其他字母应错落有致。下面是一些例子:
      var
        MyString : string;          //保留字
        WindowHandle : HWND;        //Win32 API 类型
        I : Integer;                //在System单元中引进的类型标识符

3.5.1.1 浮点指针类型

不推荐使用Real类型,因为它的存在只是为了向前兼容早期的Pascal代码。在通常情况下用Double来实现浮点指针的需要。并且,Double对处理器和总线而言是做了最优化处理的,它也是IEEE中定义的标准数据格式。只有当需要的范围超出Double所定义的范围时才使用Extended。Extended是intel定义的类型且在Java中不支持。只有当浮点指针变量的实际字节大小有其意义时才使用Single。(比如当使用另一种语言的DLLs时)。

3.5.1.2 枚举类型

枚举类型的名字需符合使用该类型的目的。该类型的名字需以字符T为前缀,以表明这是一个类型。枚举类型中的标识符列表必须包含两个或三个字符的前缀来对应于该枚举类型的名字 - 例如:
        TsongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB);
一个枚举类型的实例的名字应与不要前缀的枚举类型(SongType)相同,除非有更好的原因来赋予该变量更特殊的名字,比如:FavoriteSongType1,FavoriteSongType2 等等。

3.5.1.3 变数和ole变数类型

[1] [2] [3] [4]  下一页


[Delphi程序]Delphi 程序员代码编写标准指南  [Delphi程序]Delphi 程序员代码编写标准指南 (五)
[Delphi程序]Delphi 程序员代码编写标准指南 (四)  [Delphi程序]Delphi 程序员代码编写标准指南 (三)
[Delphi程序]Delphi 程序员代码编写标准指南 (二)  [Delphi程序]Delphi  程序员代码编写标准指南
[Delphi程序]Delphi 程序员代码编写标准指南 (六)  [Delphi程序]蛙蛙推荐:Delphi 6 程序员代码编写标准指南
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台