Delphi 程序员代码编写标准指南.doc
《Delphi 程序员代码编写标准指南.doc》由会员分享,可在线阅读,更多相关《Delphi 程序员代码编写标准指南.doc(31页珍藏版)》请在咨信网上搜索。
1、 Delphi 程序员代码编写标准指南 版权所有 1998 Xavier Perched和 Steve Teiseira一、序言3二、通用源代码格式规则42.1 缩格42.2 页边空格42.3 Begin.End 配对4三、Object Pascal53.1 括号53.3 过程和函数(例程)63.3.1 命名/格式化63.3.2 形式参数63.3.2.1 格式化63.3.2.3 参数的排序73.3.2.4 常量参数73.3.2.5 名称的冲突73.4 变量83.4.1 变量的命名和格式83.4.2 局部变量83.4.3 全局变量的使用83.5 类型93.5.1 大写约定93.5.1.1 浮点指
2、针类型93.5.1.2 枚举类型93.5.1.3 变数和ole变数类型103.5.2 结构类型103.5.2.1 数组类型103.5.2.2 记录类型103.6 语句113.6.1 if 语句113.6.2 case 语句113.6.2.1 一般性话题113.6.2.2 格式123.6.3 while 语句123.6.4 for 语句123.6.5 repeat 语句123.6.6 with 语句123.6.6.1 一般话题123.6.6.2 格式133.7 结构异常处理133.7.1 一般话题133.7.2 try.finally的使用133.7.3 try.except的使用143.7.4
3、 try.except.else的使用143.8 类类型143.8.1 命名和格式143.8.2 域153.8.2.1 命名/格式153.8.2.2 可视化153.8.3 方法153.8.3.1 命名/格式153.8.3.2 使用静态的方法153.8.3.3 使用虚拟/动态的方法153.8.3.4 使用抽象的方法163.8.3.5 属性存取方法163.8.4 属性163.8.4.1 命名/格式163.8.4.2 使用存取的方法17四、文件174.1 工程文件174.1.1 命名174.2 窗体文件174.2.1 命名174.3 数据模板文件174.3.1 命名184.4 远端数据模板文件184
4、.4.1 命名184.5 Unit文件184.5.1 通用Unit结构184.5.1.1 unit的名字184.5.1.2 uses子句184.5.1.3 interface部分194.5.1.4 implementation部分194.5.1.5 initialization部分194.5.1.6 finalization部分194.5.2 窗体单元194.5.2.1 命名194.5.3 数据模板单元204.5.3.1 命名204.5.4 一般目的单元204.5.4.1 命名204.5.5 构件单元204.5.5.1 命名204.6 文件头21五、窗体和数据模板215.1 窗体215.1.1
5、 窗体类型命名标准215.1.2 窗体实例命名标准215.1.3 自动创建窗体225.1.4 模式窗体实例化函数225.2 数据模板235.2.1 数据模板命名标准235.2.2 数据模板实例命名标准23六、包246.1 使用运行包和设计包的比较246.2 文件命名标准24七、构件257.1 用户自定义构件257.2 构件单元257.3 使用注册单元257.4 构件实例命名约定257.5 构件的前缀267.6 Standard页267.7 Additional页267.8 Win32页277.9 System页277.10 Internet页287.11 Data Access页287.13
6、Decision Cube页297.14 QReport页297.15 Dialogs页307.16 Win3.1页307.17 Samples页307.18 ActiveX页317.19 Midas页31一、序言本文档详述了在Delphi 4开发者指南下进行编程的代码编写标准。在通常情况下,本文档遵循“取消”式格式的指引方针,该方针由Borland国际通过一些例外来使用。在Delphi 4开发者指南中包含本文档的目的在于阐述一种方法,通过该方法,开发小组可以在他们所编写的代码中保持一贯的风格。这样做的目的是使在开发小组中的每一个程序员都可以明白其他程序员的代码。这有助于提高代码编写的可读性和
7、使用的一贯性。本文档并不意味着包含了所有存在于代码中的标准。但是,它的内容已足够帮你起个好头。你可以自由的增加修改这些标准来满足你的需要。我们不赞成你偏离这些由Borland开发人员所使用的标准太远。我们推荐这么做是因为一旦有新的程序员加入到你的开发小组中,而他们最喜欢和最熟悉的是Borland的标准。象大多数代码标准文档,本文档也会根据需要进行改动。因此,你可以到 Developers Network 和一些资源,在那儿可以找到你所需的信息。二、通用源代码格式规则2.1 缩格缩格是指在每一级有两个空格。不要在源代码中保留tab字符,这是因为tab字符会随着不同用户的不同设置和不同的资源管理工
8、具(打印、文档、版本控制等)而代表不同的宽度。你可以通过关闭Environment选项对话框中Editor页上的“Use tab character”和“Optimal fill”检查框(通过Tools|Environment)来禁止保存tab字符。2.2 页边空格页边空格会被设置成80字符宽。通常,源码不会超出这个边界,但这个方针会有一些弹性。不管是否有可能,那些超出到另一行的语句会在一个逗号或其他操作符之后与前面的语句相连。当一个语句被打断相连时,它应比原来的那一行语句缩进两个字符。2.3 Begin.End 配对Begin 子句应写在独立的一行。例如,下面第一行是错误的写法而第二行是正确
9、的。for I := 0 to 10 do begin /错误,begin同for在同一行for I := 0 to 10 do /正确,begin出现在独立的一行begin这个规则的例外是当begin子句的出现是作为一个else子句的一部分参考例子:if some statement thenbegin .endelse begin someOtherStatement;end;end 语句永远出现在独立的一行。当begin语句不是一个else子句的一部分时,相应的end语句永远缩进到与begin部分相对应的位置。文档顶端三、Object Pascal3.1 括号永远不要在括号与括号之间的字
10、符中间留下空格。下面的例子示范了错误的与正确地使用括号中的空格: CallProc( Aparameter ); /错误 CallProc(Aparameter); /正确永远不要在一个语句中使用不必要的括号。括号只应在源代码中需要的地方使用。以下的例子示范了错误和正确的使用:if (I = 42) then /错误 多余的括号if (I = 42) or (J = 42) then /正确 需要括号3.2 保留字和关键字Object Pascal 保留字和关键字永远是全部小写。3.3 过程和函数(例程)3.3.1 命名/格式化例程的名字永远应该以大写的字母开头并且中间错落分明以便于可读性。下
11、面是一个不正确格式的过程名称: procedure thisisapoorlyformattedroutinename;下面是一个合适的大小写例程名称的例子: procedure ThisIsMuchMoreReadableRoutineName;例程的名称应该同它的内容相符。一个会导致某个行为的例程应以动词开头。例如: procedure FormatHardDrive;一个用于设置输入参数的例程应以单词set作为前缀,例如: procedure SetUserName;一个用来接收某个值的例程应以单词get作为前缀,例如: procedure GetUserName : string;3.
12、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 参数的排序下面的形参的顺
13、序重点说明了注册者调用约定调用的好处。 最常用的参数应放在第一位,其它的参数应按从左到右的顺序排列。 输入参数列表应放在输出参数列表的左边。 将通用的参数放在特殊参数的左边,例如: procedure SomeProc(Aplanet, AContinent, Acountry, Astate, Acity) 排序有可能有些例外,比如事件的处理。类型为TObject的Sender参数经常放在第一位。3.3.2.4 常量参数当一个参数为记录型、数组类型、ShortString、或接口类型并且在例程中不被改变时,这些参数应做上常量标记。这样做会让编译器更加有效率的产生有关这些不改变的参数的代码。而
14、例程中另外一些非变参数也可常量来传送。尽管这样做没有产生任何效果和提高效率,这将会给调用例程的使用者提供更多的信息。3.3.2.5 名称的冲突当使用拥有两个名称相同的例程的两个单元时,如果你调用该例程时,在uses子句中排在后面的单元中的例程将会被调用。为了解决这种“在uses子句上的模糊”冲突,要在调用该例程时写上相关的单元的前缀,例如: sysUtile.FindClose(SR);或 windows.FindClose(Handle);3.4 变量3.4.1 变量的命名和格式变量的命名应以使用它们的目的相符循环控制变量应采用一个单独的字符作为名字,比如 I,J,或K,也可以采用更加有意义
15、的名字,比如 UserIndex。逻辑变量的名字应能充分表达准确的真或假的意思。3.4.2 局部变量一个过程中的局部变量应遵循所有其它变量的使用和命名约定。临时变量的取名应合理。如果必须的话,在一进入例程就应初始化局部变量。局部的AnsiString变量会自动初始化为一个空的字符串。局部接口和派分接口类型变量将会自动初始化为nil,并且局部变数和ole变数类型变量会自动初始化为Unassigned3.4.3 全局变量的使用使用全局变量是不推荐的。但是,在某些时候还是必须使用,而且它们也只应在必须使用的时候才使用。在这种时候,你应努力只在一段上下文范围内使用全局变量。例如,一个全局变量只应在一个
16、单元的implemntation部分内是全局的。如果打算在多个单元类使用全局数据,你应将它们移到一个公共的单元中然后被其它所有单元使用。全局变量可以在var子句中直接初始化为一个值。记住,所有的全局数据会自动初始化为0,因此不要将全局变量初始化为一个“空”值比如 0、nil、Unassigned、等等。这样做的一个理由是因为零初始化的全局数据在exe文件中不会占据任何空间。零初始化数据被存储在一个虚拟的数据段,它在应用程序启动后被分配在一段内存中。非零初始化的全局数据在硬盘的exe文件占用空间。3.5 类型3.5.1 大写约定如果类型的名字是保留字,那么它应全部小写。Win32 API类型通常
17、全部大写,并且你必须遵循在Windows.pas或其他API单元中的详细类型名称的约定。对于其他变量名字,地一个字母应为大写,而其他字母应错落有致。下面是一些例子: var MyString : string; /保留字 WindowHandle : HWND; /Win32 API 类型 I : Integer; /在System单元中引进的类型标识符3.5.1.1 浮点指针类型不推荐使用Real类型,因为它的存在只是为了向前兼容早期的Pascal代码。在通常情况下用Double来实现浮点指针的需要。并且,Double对处理器和总线而言是做了最优化处理的,它也是IEEE中定义的标准数据格式。
18、只有当需要的范围超出Double所定义的范围时才使用Extended。Extended是intel定义的类型且在Java中不支持。只有当浮点指针变量的实际字节大小有其意义时才使用Single。(比如当使用另一种语言的DLLs时)。3.5.1.2 枚举类型枚举类型的名字需符合使用该类型的目的。该类型的名字需以字符T为前缀,以表明这是一个类型。枚举类型中的标识符列表必须包含两个或三个字符的前缀来对应于该枚举类型的名字 例如: TsongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB);一个枚举类型的
19、实例的名字应与不要前缀的枚举类型(SongType)相同,除非有更好的原因来赋予该变量更特殊的名字,比如:FavoriteSongType1,FavoriteSongType2 等等。3.5.1.3 变数和ole变数类型通常不建议使用变数和Ole变数类型。但在只有运行时刻才能知道数据类型的程序中必须使用该类型,这种情形多出现在COM和数据库开发中。Ole变数使用在以COM为基础的编程中例如自动化和ActiveX控制,而变数使用在非COM的编程中,这是因为变数可以十分有效地存储本地Delphi字符串(同一个字符串变量一样),但Ole变数会将所有的字符串转换为Ole字符串(WideChar 字符串
20、)并且并不实例运算 它们永远拷贝。3.5.2 结构类型3.5.2.1 数组类型数组类型的名字需符合它们使用的目的。该类型的名字必须加以前缀T。如果须声明该数组类型的指针,那么该指针需加以前缀P而且应立即声明在该数组声明的前面。例如: type PCycleArray = TCycleArray; TCycleArray = array1.100 of integer;在实际应用中,数组的变量实例的名称应是其类型的名字去掉前缀T。3.5.2.2 记录类型记录类型的名字应符合使用它们的目的。其类型的声明应加以前缀T。如果要声明该记录类型的指针,就应加以前缀P并且应紧靠在类型声明的前面声明。例如:
21、type PEmployee = TEmployee; TEmployee = record EmployeeName : string; EmployeeRate : Double; end;3.6 语句3.6.1 if 语句在if/then/else语句中最常发生的行为应放在then子句中,而其它发生可能性较小的行为应放在else子句中。尽量避免使用嵌套的if语句,在这种情形下应用多个if语句来判断各种可能。不要使用if嵌套超过五级深度。应使代码编写得更加清晰、明了。不要在if语句中使用不必要的圆括号。如果在if语句中有多个条件需测试,这些条件应按计算强度由少到多的顺序从左到右排列。这样做
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Delphi 程序员代码编写标准指南 程序员 代码 编写 标准 指南
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。