OLEObject OLEStorage OLEStream PowerOobject Pipeline Profilling Service Timing Trangcation Transport Oleobg Olestg Olestr Po Pl Prf Svc Tmg Tr trp 前缀 Pipe_ Dw_ Dddw_ F_ Wf_ M_ P_ Pry_ Q_ S_ U_ W_ R_ 举例 Pipe_invoice Dw_clint Dddw_state F_display Wf_input M_main P_tracking Pry_custrom Q_agent S_employee W_ancestor R_list 类名
对象名称 Data Ppipeline Data Window Object DrawDownDataWindow Function(global) Function(window) Menu Project Proxy Query Structure User Object Windows Report 其他控件的命名:对于上面没有列出的控件,应该用唯一的由三个字符组成的前缀使它们标准化,以保持一致性。另外,对于程序中自定义的控件,也应该用唯一的由三个字符组成的前缀使它们标准化,并在该程序中保持一致。只有当需要澄清时,才使用多于三个字符的前缀。小组中通用的自定义的控件,应该单独提交,指定相应的命名标准。
2.5 格式化编码约定
2.5.1 代码注释约定
所有的过程和函数都应该以描述这段过程的功能的一段简明注释开始(这段例程干什么)。这种描述不应该包括执行过程细节(它是怎么做的),因为这常常是随时间而变的,而且这种描述会导致不必要的注释维护工作,甚至更糟—成为错误的注释。代码本身和必要的嵌入注释将描述实现方法。
当参数的功能不明显且当过程希望参数在一个特定的范围内时,也应描述传递给过程的参数。被过程改变的函数返回值和全局变量,特别是通过引用参数的那些,也必须在每个过程的起始处描述它们。 函数头注释块应该包括下列节标题
节标题 Purpose
注释描述
该过程完成什么(而不是怎么完成)。
列出每个外部变量、控件、打开文件或其它不明显元素。 列出每个被影响的外部变量、控件、或文件及其作用(只有当它
Assumption Effect
不明显时)。 Input
每一个可能不明显的参数。参数分别在单独的行上,并嵌入注释。 返回,函数返回值的说明。
Return
记住下列几点:
■
每一个重要变量的声明应该包括一个嵌入注释,来描述该变量的使用。 变量、控件及过程的命名应该足够清楚,从名字就可以判断他们的作用,使
■
得只有复杂的执行细节才需要嵌入注释。 2.5.2 格式化代码
变量命名放在程序的前端,并按类型分开 建议保留字第一个字母大写,如: String ls_getstring
ls_getstring = This.Gettext()
Pb函数第一个字母大写,函数较长且具有分段性含义时,适当把其中字母大写,如:
ls_getfile = ProfileString(‘c:\\pb.ini’,’pb’,’pb’,’None!’) dw_mian.AcceptText()
循环、分支、判断语句中,采取层层缩进的风格如下所示: For ll_num = 1 to ll_count If ll_num = 5 Then Ls_aa = String(ll_num * 5)
Return ls_aa
Elseif ll_num = 10 Then ???? End if
???? Next
Do While ll_num < 20
Ls_value[ll_num] = ll_num * 5 ??
Loop
Choose Case ll_num
Case 1 ?? Case 2
??
End Choose
程序行不要太长,以屏幕能显示为基准;太长时使用&号换行。换行程序退一个位开始,如:
If Trim(dw_data.GetitemString(1,2,)) = ‘Column’ Or & Trim(dw_data.GetitemString(1,2,)) = ‘Name’ Then 程序运算符前后建议用空格分阁,如
ls_aa = dw_main.Gettext() 而不要ls_aa=dw_main.Gettext()
2.5.3 PB程序注释规范
每个PBL库、每一个对象必须有注释,说明其主要功能。 在代码中,以“/* ??* /” 为段注释。“//”为行注释。
代码中每一个功能段必须要有段注释。在功能段开始处开始注释,结束处标明该功能结束。为了避免交叉注释混乱,可以在注释开始加“注释段1”等说明。“//”只放在代码行的最后面,对当前行的代码进行说明。如: /*注释段1:取得数据窗对象的各种属性*/ ?????? // 取得字段类型
/*注释段2:判断某字段是否为日期型属性*/ ?????? /*注释段2结束*/
?????? // 返回结果 /*注释段1结束*/
变量定义放在程序首端,按各功能段分开注释;如果有多个功能段公共使用的变量,则放在最前面,并将变量含义注释说明。如: /*公共变量定义*/
String ls_column_name,ls_column_value // 数据窗对象列名、数据 Long ll_row,ll_rowcount // 当前行、行总数 /*功能A 变量定义*/ Long ll_I String ls_col ????
附代码说明、变量定义模板:
/*******************************************************/ //
// 以下代码版权为厦门巨龙软件公司所有,严禁非法拷贝 //
/*******************************************************/
/*******************总体功能说明************************/ //
/*******************功能模块列表说明********************/ //模块A: //模块B:
/**********************变量定义*************************/ //
/*********************公共变量定义**********************/ //
/*******************功能A变量定义*********************/ // ?????? /*******************功能B变量定义*********************/ // ?????? /*******************变量定义结束************************/ /***********************1999/07**************************/
每一个全局变量必须有注释说明,说明其作用和应用大概范围 每一个实例变量和共享必须有注释说明,说明其作用。
每一个函数必须要有详细的注释,在函数代码前端必须进行详细说明: 函数的功能、函数的参数、函数返回值和错误处理。如:
//函数f_col_nullcheck() 用于校验数据窗指定列中是否有值 //参数:1 adw_data datawindow 需要校验的数据窗 // 2 as_col string 需要校验校验的列 //返回值:1 成功 //
-1 有空值
// -2 列名列表有误
/******************************************************************** Char (n) ?n is the number of characters
?Date
?DateTime
?Decimal (n) ?n is the number of decimal places ?Number ?Time ?Timestamp
********************************************************************/
2.5.4 SQL语句变量定义和注释规则
SQL 语句中变量当作局部变量。定义方式以L加变量数据类型为前缀,即如果使字符或字符串则为:Ls_;数值型为:ln_;日期型为:ld_。
注释规范与PB代码类似,每段SQL开始时要用/**/注释该段代码的功能和作用。如建表则要说明该表名称和简单的描述。视图则说明名称外,还要注明视图涉及的表。在多级视图(即视图中套用视图)中,各个视图必须说明它们之间的关联关系,而最终视图必须指明与前台对应的统计报表或相关数据窗对象。如,VW_A视图由VW_1,VW_2,VW_3三个视图组成,而VW_1由表T_1得到,VW_2由表T_2得到,VW_3由表T_3得到,那么,VW_1、VW_2、VW_3必须说明由T_1、T_2、T_3得到,同时也须说明它们是组成VW_A的;而VW_A必须说明由VW_1、VW_2、VW_3得到,同时说明VW_A与前台数据窗对象的对应关系。 在过程、触发器、函数、软件包中,则要说明其功能和作用的表或视图;如果有参数则要说明其参数的意义。 行注释加在改行的最后面。