.2 try…except的使用 ............................................................................................ 19 3.10.3 try…except…else的使用 .................................................................................. 19 3.11类 ................................................................................................................................... 20 3.11.1 命名和格式 ....................................................................................................... 20 3.11.2 私有变量private ............................................................................................. 20 3.11.3 方法 ................................................................................................................... 20 3.11.4 属性 ................................................................................................................... 21 3.12注释 ............................................................................................................................... 22 4组件命名约定 ............................................................................................................................ 24 4.1 Standard页...................................................................................................................... 24 4.2 Additional页 ................................................................................................................... 24 4.3 Win32页 ......................................................................................................................... 25 4.4 System页 ........................................................................................................................ 25 4.5 Internet页 ....................................................................................................................... 25 4.6 Data
Access页 ................................................................................................................ 26 4.7 Data Controls页 ............................................................................................................. 26 4.8 Decision Cube页 ............................................................................................................ 26 4.9 QReport页 ...................................................................................................................... 27 4.10 Dialogs页 ..................................................................................................................... 27 4.11 Win3.1页 ...................................................................................................................... 27 4.12 Samples页 .................................................................................................................... 28 7.13 ActiveX页 .................................................................................................................... 28 7.14 Midas页 ........................................................................................................................ 28 1序言 本文描述了一种编写Delphi应用程序的代码规范该规范尽可能地接近Borland的Delphi代码风格但并不意味着与Borland公司的代码风格完全一致。
本文的目的仅在于使自己保持一贯代码风格增强代码可读性提高程序可维护性。
您可以自由地修改这个标准来满足您的需要如果有好的建议我希望您能够给我发送一份我将十分感谢。
本文参考了《Delphi 4 Developers Guide Coding Standards Document》Xavier Perched和Steve Teiseira1998、《代码创建形式规范1.0 》bear2000-5-1在此对他们所付出的努力和劳动表达我最真诚的感谢。
2 Delphi工程项目 2.1 工程文件 2.1.1建立工程目录树 在开始一个项目之前建立一个合理的工程目录树是非常必要的组织好项目的所有文件将是一个好的开始。
在这里推荐一种工程目录树如下图所示 图2.1 Bin目录是编译、链接后输出的二进制文件。
例如EXE可执行文件BPL包DLL动态链接库。
Data存放数据库文件。
Dcu是放置程序编译生成的中间文件的临时目录。
Doc存放与项目相关的所有文档。
Help的Source目录放置生成软件手帮助文档的源文件。
例如HTM文件、Word文档等软件帮助手册生成后输出到Help的Bin目录。
Install的Source目录存放安装程序的源文件Install的Output目录保存最终的可执行安装程序。
Source目录的Common通常放置一些程序的公共单元在Components放置项目用到的所有第三方组件。
2.1.2 命名 工程文件应取个描述性的名字描述软件可提供的功能。
例如SysInfo.dpr这会让人容易想到是一个获取操作系统信息之类的软件。
工程的名字应当容易被记忆一个g4j8a9.dpr的工程名可能很久才会让人记住。
2.2 Unit文件 2.2.1 Unit命名 Unit文件应取一个描述性的名字说明这个单元的业务逻辑作用。
例如GetData.pas很难让人知道这个单元是获取什么样的什么类型的数据而CustomerInfo.pas会让人容易想到这是一个保存了客户信息的单元。
包含了窗体的单元通常根据窗体实现的功能进行命名。
例如包含应用程序主窗体的单元应叫做Main.pas。
包含了数据模块DataModule的窗体单元文件通常加前缀d以区分。
例如dCustomer.pas是用来连接客户数据的DataModule。
如果是不包含任何窗体文件的独立单元可加前缀u来说明该单元是独立的。
例如一个解析XML文件的单元uXmlParse.pas。
2.2.2窗体、数据模块的命名 窗体的名字应该是所在单元的名加前缀frm。
例如主窗体单元名为Main.pas窗体名则为frmMain同理一个“关于我们”的单元About.pas其所在窗体的名字应该是frmAbout。
数据模块的窗体名应该是去掉前缀d的单元名再加前缀dm。
例如连接客户数据的DataModule单元名为dCustomer.pas窗体名为dmCustomer。
2.2.3 文件头 建议在所有源文件、工程文件、单元等等中使用信息化文件头。
一个良好的文件头至少应包含单元功能版权信息等信息。
下面是一个文件头的示例 示例2.1 XML / XSL Parser Visual Component Library Copyright c 1998-2001 Shanghai Power Inc. Programmer: xiao liChina Steven LeeUS email: zhaojinnanp3China.com homepage: http://www.p3china.com 2.2.4 uses子句 在interface部分的uses子句应包含在interface部分中的代码所需要的单元去掉那些Delphi IDE可以自动加入到程序中的单元。
在implementation部分的uses子句应只包含在implementation部分中的代码所需要的单元的名字去掉不必要的单元。
2.2.5 interface部分 interface部分应包含只那些其它单元所需要存取类型的定义、变量、过程或函数的预定义等等。
否则就应放在implementation部分定义。
2.2.6 implementation部分 implementation部分应包含那些只在本单元中私用的类型定义、变量、过程或函数定义等等。
2.2.7文件尾 一些重要的单元特别是当多人协作时指定修改历史将对以后的维护提供重要依据。
示例2.2 // History: // // 标记说明 // 新功能 // 用新功能替换旧的功能 // - 删除旧的功能 // 修正缺陷 // // // Revision 1.00 2005/10/14 xiao li // 修改无法修改记录的错误 // // Revision 1.01 2005/10/28 01:32:50 Steven Lee // 增加全文搜索功能 // 2.3一个完整的单元示例 示例2.3是一个完整的单元结构示例这个单元没有完成任何功能仅供参考。
示例2.3 XML / XSL Parser Visual Component Library Copyright c 1998-2001 Shanghai Power Inc. Programmer: xiao liChina Steven LeeUS email: zhaojinnanp3China.com homepage: http://www.p3china.com // Last modified: Date: 2005/11/10 00:12:53 // For history see end of file unit Main interface const CUSTOMER_COUNT 10 uses Windows Messages SysUtils Variants Classes Graphics Controls Forms Dialogs StdCtrls type TfrmMain classTForm Button1: TButton procedure Button1ClickSender: TObject private Private declarations public Public declarations end var frmMain: TfrmMain implementation uses About R .dfm procedure TfrmMain.Button1ClickSender: TObject begin ShowMessageHello World end end. // History: // // 标记说明 // 新功能 // 用新功能替换旧的功能 // - 删除旧的功能 // 修正缺陷 // // // Revision 1.00 2005/10/14 xiao li // 修改无法修改记录的错误 // // Revision 1.01 2005/10/28 01:32:50 Steven Lee // 增加全文搜索功能 // 3 Object Pascal 3.1 代码缩进 在需要代码缩进的地方缩进2个空格半角。
示例3.1 if I 0 then begin ShowMessageHello world end 避免在源代码中保留tab字符这是因为tab字符会随着不同用户的不同设置和不同的资源管理工具打印、文档、版本控制等而代表不同的宽度。
特别是当tab与空格混合使用时打印出来的效果也许会让您大吃一惊。
您可以打开ToolsEditor PropertiesDelphi7选项卡关闭Source Options页上的“Use tab character”和“Optimal fill”选项禁止保存tab字符。
如图3.1 图3.1 3.2 页边空格 页边空格根据默认会被设置成80个字符宽。
通常代码不应超出这个边界但当另起一行会导致代码的可读性下降时可弹性地超过这个限制。
不管是否有可能那些超出到另一行的语句应在一个逗号或其他操作符之后与前面的语句相连。
当一个语句被打断相连时它应比原来的那一行语句缩进两个字符。
示例3.2 MessageBoxSelf.Handle Hello World Information MB_OK MB_ICONINFORMATION MB_TOPMOST 3.3 begin??end 配对 begin子句应写在独立的一行。
例如示例3.3中的第一种的写法久佳而第二种写法最好。
示例3.3 第一种写法久佳begin与for在同一行 for I : 0 to 10 do begin J : I 2 end 推荐使用第二种写法begin在独立的一行 for I : 0 to 10 do begin J : I 2 end 这个规则的一个例外是当begin子句的出现是作为一个else子句的一部分 示例3.4 if I 0 then begin J : I end else begin J : I 1 end 当begin语句不是一个else子句的一部分时相应的end语句永远缩进到与begin部分相对应的位置。
end语句应永远出现在独立的一行。
3.4 括号 不要在括号与括号之间的字符中间留下空格。
示例3.5 ShowMessag.
上一篇:
【精品】C语言课程设计——飞机订票系统源代码
下一篇:
贪心算法论文终稿