您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 程序员代码编写标准指南
第1页共26页Delphi6程序员代码编写标准指南一、序言二、通用源代码格式规则2.1缩格2.2页边空格2.3Begin…End配对2.4代码文件中通用符号含义三、ObjectPascal3.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.1if语句3.6.2case语句3.6.2.1一般性话题3.6.2.2格式3.6.3while语句3.6.4for语句3.6.5repeat语句第2页共26页3.6.6with语句3.6.6.1一般话题3.6.6.2格式3.7结构异常处理3.7.1一般话题3.7.2try…finally的使用3.7.3try…except的使用3.7.4try…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.5Unit文件4.5.1通用Unit结构4.5.1.1unit的名字4.5.1.2uses子句4.5.1.3interface部分4.5.1.4implementation部分4.5.1.5initialization部分4.5.1.6finalization部分4.5.2窗体单元第3页共26页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.6Standard页7.7Additional页7.8Win32页7.9System页7.10Internet页7.11DataAccess页7.12DataControls页7.13DecisionCube页7.14Qreport页7.15Dialogs页7.16Win3.1页7.17Samples页7.18ActiveX页7.19Midas页7.20ADO页7.21InterBase页7.22InternetExpress页7.23FastNet页第4页共26页一、序言本文档详述了使用JAVA进行编程的代码编写标准。本文档的目的在于阐述一种方法,通过该方法,开发小组可以在他们所编写的代码中保持一贯的风格。这样做的目的是使在开发小组中的每一个程序员都可以明白其他程序员的代码。这有助于提高代码编写的可读性和使用的一贯性。二、通用源代码格式规则2.1缩格tab字符代表4个空格宽度。代码的每一层次缩进量为一个tab(4个空格)2.2页边空格页边空格会被设置成80字符宽。通常,源码不会超出这个边界,但这个方针会有一些弹性。不管是否有可能,那些超出到另一行的语句会在一个逗号或其他操作符之后与前面的语句相连。当一个语句被打断相连时,它应比原来的那一行语句缩进两个字符。2.3代码文件中通用符号含义////四个斜杠代表当前有未实现的内容,相当于占位符三、Object3.1括号不要在括号与括号之间的字符中间留下空格。下面的例子示范了错误的与正确地使用括号中的空格:main(Aparameter);//错误main(Aparameter);//正确3.3函数(例程)第5页共26页3.3.1命名/格式化1.变量的命名命名应尽量表达变量的含义,大小写遵循Java的驼峰规则。一个正确格式的变量名称:publicuserName;一个不合适的变量名称:publicUserName;例程的名称应该同它的内容相符。一个会导致某个行为的例程应以动词开头。例如:procedureFormatHardDrive;一个用于设置输入参数的例程应以单词set作为前缀,例如:procedureSetUserName;一个用来接收某个值的例程应以单词get作为前缀,例如:procedureGetUserName:string;3.3.2形式参数3.3.2.1格式化如果有的话,相同类型的形参应合并在一个语句中:procedureFoo(Param1,Param2,Param3:Integer;Param4:string);3.3.2.2命名所有形参的名字应是十分符合它们所代表的意义,特别是应该以传送到例程中的标志符的名称为基础。一个好的参数名称应以字符a为前缀-例如:procedureSomeProc(aUserName:string;aUserAge:integer);“a”前缀按约定表示该参数的名称是与类类型中的一个属性或域的名称相对应的。3.3.2.3参数的排序下面的形参的顺序重点说明了注册者调用约定调用的好处。-最常用的参数应放在第一位,其它的参数应按从左到右的顺序排列。-输入参数列表应放在输出参数列表的左边。-将通用的参数放在特殊参数的左边,例如:procedureSomeProc(aPlanet,aContinent,aCountry,aState,aCity)-排序有可能有些例外,比如事件的处理。类型为TObject的Sender参数经常放在第一位。3.3.2.4常量参数第6页共26页当一个参数为记录型、数组类型、ShortString、或接口类型并且在例程中不被改变时,这些参数应做上常量标记。这样做会让编译器更加有效率的产生有关这些不改变的参数的代码。而例程中另外一些非变参数也可常量来传送。尽管这样做没有产生任何效果和提高效率,这将会给调用例程的使用者提供更多的信息。3.3.2.5名称的冲突当使用拥有两个名称相同的例程的两个单元时,如果你调用该例程时,在uses子句中排在后面的单元中的例程将会被调用。为了解决这种“在uses子句上的模糊”冲突,要在调用该例程时写上相关的单元的前缀,例如:SysUtils.FindClose(SR);或Windows.FindClose(Handle);3.4变量3.4.1变量的命名和格式变量的命名应以使用它们的目的相符循环控制变量应采用一个单独的字符作为名字,比如I,J,或K,也可以采用更加有意义的名字,比如UserIndex。逻辑变量的名字应能充分表达准确的真或假的意思。3.4.2局部变量一个过程中的局部变量应遵循所有其它变量的使用和命名约定。临时变量的取名应合理。局部变量应加上前缀tmp,如tmpUserName。如果必须的话,在一进入例程就应初始化局部变量。局部的AnsiString变量会自动初始化为一个空的字符串。局部接口和派分接口类型变量将会自动初始化为nil,并且局部变数和ole变数类型变量会自动初始化为Unassigned3.4.3全局变量的使用使用全局变量是不推荐的。但是,在某些时候还是必须使用,而且它们也只应在必须使用的时候才使用。在这种时候,你应努力只在一段上下文范围内使用全局变量。例如,一个全局变量只应在一个单元的implemntation部分内是全局的。如果打算在多个单元类使用全局数据,你应将它们移到一个公共的单元中然后被其它所有单元使用。第7页共26页全局变量可以在var子句中直接初始化为一个值。记住,所有的全局数据会自动初始化为0,因此不要将全局变量初始化为一个“空”值比如0、nil、’’、Unassigned、等等。这样做的一个理由是因为零-初始化的全局数据在exe文件中不会占据任何空间。零-初始化数据被存储在一个虚拟的数据段,它在应用程序启动后被分配在一段内存中。非零-初始化的全局数据在硬盘的exe文件占用空间。全局变量命名应加上前缀glb,如glbUserName。3.5类型3.5.1大写约定如果类型的名字是保留字,那么它应全部小写。Win32API类型通常全部大写,并且你必须遵循在Windows.pas或其他API单元中的详细类型名称的约定。对于其他变量名字,第一个字母应为大写,而其他字母应错落有致。下面是一些例子:varMyString:string;//保留字WindowHandle:HWND;//Win32API类型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变数类型通常不建议使用变数和Ole变数类型。但在只有运行时刻才能知道数据类型的程序中必须第8页共26页使用该类型,这种情形多出现在COM和数据库开发中。Ole变数使用在以COM为基础的编程中例如自动化和ActiveX控制,而变数使用在非COM的编程中,这是因为变数可以十分有效地存储本地Delphi字符串(同一个字符串变量一样),但Ole变数会将所有的字符串转换为Ole字符串(WideChar字符串)并且并不实例运算-它们永远拷贝。3.5.2结构类型3.5.2.1数组类型数组类型的名字需符合它们使用的目的。该类型的名字必须加以前缀T。如果须声明该数组类型的指针,那么该指针需加以前缀P而且应立即声明在该数组声明的前面。例如:typePCycleArray=^TCycleArray;TCycleArray=array[1…100]ofinteger;在实际应用中,数组的变量实例的名称应是其类型的名字去掉前缀T。3.5.2.2记录类型记录类型的名字应符合使用它们的目的。其类型的声明应加以前缀T。如果要声明该记录类型的指针,就应加以前缀P并且应紧靠在类型声明的前面声明。例如:typePEmployee=^TEmployee;TEmployee=recordEmployeeName:string;EmployeeRate:Double;end;3.6语句3.6.1if语句在if/then/else语句中最常发生的行为应放在then子句中,而其它发生可能性较小的行为应放在else子句中。尽量避免使用嵌套的if语句,在这种情形下应用多个if语句来判断各种可能。不要使用
本文标题:程序员代码编写标准指南
链接地址:https://www.777doc.com/doc-2150882 .html