【命名约定】
一、变量名的约定:
命名规则主要采用匈牙利命名法。进行了一些增删。
1. 用小写字母的前缀表示变量的类型,前缀的下一个字母用大写。
-----------------------------------------------------------------
前缀 类型 例子
b * Boolean bIsParent
by 字节 byFlag
ch * char chText
c * 类对象 cMain(对象实例)
fn Function fnCallback
h * Handle(句柄) hWnd
i * int
n * 无符号整型
p * 指针
sz,str * 字符串
w WORD
x,y 坐标 xPos, yPos
-----------------------------------------------------------------
其中,带“*”号的为常用约定。
其它前缀:
m_ 类成员变量 m_nVal, m_bFlag
g_ 全局变量 g_nMsg, g_bFlag

局部变量中可采用如下几个通用变量:nTemp,nResult,I,J(一般用于循环变量)。

二、VB中控件的命名:
用小写前缀表示类别:
fm 窗口
cmd 按钮
cob combo,下拉式列表框
txt 文本输入框
lab labal,标签
img image,图象
pic picture
字符常量怎么表示grd Grid,网格
scr 滚动条
lst 列表框
frm fram

【注释规范】
一、函数
在函数开头,用如下格式注释:
/***************************************************************/
/* Function: DelStringFrom string */
/
* 从一个String删除另一个String。 */
/* 参数:strByDelete,strToDelete */
/* strByDelete: 被删除的字符串(原来的字符串) */
/* strToDelete: 要从上个字符串中删除的字符串。 */
/* 返回:到并删除返回0,否则返回-1. */
/***************************************************************/

二、变量
对于非通用的变量,请在定义时加以注释说明,变量定义尽可能放在最开始处。

三、文件注释
在文件开头注释以下内容:
////////////////////////////////////////////////////////////////
// Project: 文件所在的项目名,如:eForum
// By: 作者、修改者、...,如:xiaobo、.
/
/ Discription: 说明文件的功能。
////////////////////////////////////////////////////////////////

四、其它
函数内各功能模块,如:循环、流程的各分支等,尽可能多的加以注释。
程规范


1.基本要求

1.1 程序结构清析,简单易懂,单个函数的程序行数不得超过100行。
1.2 打算干什么,要简单,直接了当,代码精简,避免垃圾程序。
1.3 尽量使用标准库函数和公共函数。
1.4 不要随意定义全局变量,尽量使用局部变量。
1.5 使用括号以避免二义性。


2.可读性要求
2.1 可读性第一,效率第二。
2.2 保持注释与代码完全一致。
2.3 每个源程序文件,都有文件头说明,说明规格见规范。
2.4 每个函数,都有函数头说明,说明规格见规范。
2.5 主要变量(结构、联合、类或对象)定义或引用时,注释能反映其含义。
2.7 常量定义(DEFINE)有相应说明。
2.8 处理过程的每个阶段都有相关注释说明。
2.9 在典型算法前都有注释。
2.10 利用缩进来显示程序的逻辑结构,缩进量一致并以Tab键为单位,定义Tab为 6个
字节。
2.11 循环、分支层次不要超过五层。
2.12 注释可以与语句在同一行,也可以在上行。
2.13 空行和空白字符也是一种特殊注释。
2.14 一目了然的语句不加注释。
2.15 注释的作用范围可以为:定义、引用、条件分支以及一段代码。
2.16 注释行数(不包括程序头和函数头说明部份)应占总行数的 1/5 到 1/3 。


3. 结构化要求

3.1 禁止出现两条等价的支路。
3.2 禁止GOTO语句。
3.3 用 IF 语句来强调只执行两组语句中的一组。禁止 ELSE GOTO 和 ELSE RETURN。
3.4 用 CASE 实现多路分支。
3.5 避免从循环引出多个出口。
3.6 函数只有一个出口。
3.7 不使用条件赋值语句。
3.8 避免不必要的分支。
3.9 不要轻易用条件分支去替换逻辑表达式。

4. 正确性与容错性要求

4.1 程序首先是正确,其次是优美
4.2 无法证明你的程序没有错误,因此在编写完一段程序后,应先回头检查。
4.3 改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。
4.4 所有变量在调用前必须被初始化。
4.5 对所有的用户输入,必须进行合法性检查。
4.6 不要比较浮点数的相等,
如: 10.0 * 0.1 == 1.0 , 不可靠
4.7 程序与环境或状态发生关系时,必须主动去处理发生的意外事件,如文件能否
逻辑锁定、打印机是否联机等。
4.8 单元测试也是编程的一部份,提交联调测试的程序必须通过单元测试。

5. 可重用性要求

5.1 重复使用的完成相对独立功能的算法或代码应抽象为公共控件或类。
5.2 公共控件或类应考虑OO思想,减少外界联系,考虑独立性或封装性。
5.3 公共控件或类应建立使用模板。

附:C++ 编程规范,delphi作相应的参考


.1适用范围

本标准适用于利用Visul C++ ,Borland C++进行软件程序开发的人员.。



.2变量命名


命名必须具有一定的实际意义,形式为xAbcFgh,x由变量类型确定,Abc、Fgh表示连续意
义字符串,如果连续意义字符串仅两个,可都大写.如OK.

具体例程:

BOOL类型 bEnable;



ch * char chText
c * 类对象 cMain(对象实例)
h * Handle(句柄) hWnd
i * int
n * 无符号整型
p * 指针
sz,str * 字符串
w WORD
x,y 坐标

Char或者TCHAR类型 与Windows API有直接联系的用szAppName[10]形式否则用
FileName[10]形式,单个字符也可用小写字母表示;

Int类型 nCmdShow;

LONG类型 lParam;

UINT类型 uNotify;

DWORD类型 dwStart;

PSTR类型 pszTip;


LPSTR类型 lpCmdLine

LPTSTR类型 lpszClassName;

LPVOID类型 lpReserved

WPARAM类型 wParam,

LPARAM类型 lParam

HWND类型 hDlg;

HDC类型 hDC;

HINSTANCE类型 hInstance


HANDLE类型 hInstance,

HICON类型 hIcon;

int iTmp

float fTmp

DWORD dw*

String , AnsiString str *

m_ 类成员变量 m_nVal, m_bFlag
g_ 全局变量 g_nMsg, g_bFlag

局部变量中可采用如下几个通用变量:nTemp,nResult,I,J(一般用于循环变量)。

其他资源句柄同上

.3常量命名和宏定义

常量和宏定义必须具有一定的实际意义;

常量和宏定义在#include和函数定义之间;

常量和宏定义必须全部以大写字母来撰写,中间可根据意义的连续性用下划线连接,每一
条定义的右侧必须有一简单的注释,说明其作用;

资源名字定义格式:

菜单:IDM_XX或者CM_XX


位图:IDB_XX

对话框:IDD_XX

字符串:IDS_XX

DLGINIT:DIALOG_XX

ICON:IDR_XX

.4函数命名

函数原型说明包括引用外来函数及内部函数,外部引用必须在右侧注明函数来源: 模
块名及文件名, 如是内部函数,只要注释其定义文件名;

第一个字母必须使用大写字母,要求用大小写字母组合规范函数命名,必要时可用下划线
间隔,示例如下:

void UpdateDB_Tfgd (TRACK_NAME); //Module Name :r01/sdw.c

void PrintTrackData (TRACK_NAME); //Module Name :r04/tern.c

void ImportantPoint (void); //Module Name :r01/sdw.c

void ShowChar (int , int , chtype); //Local Module

void ScrollUp_V (int , int); //Local Module

.5结构体命名

结构体类型命名必须全部用大写字母,原则上前面以下划线开始;结构体变量命名必须用
大小写字母组合,第一个字母必须使用大写字母,必要时可用下划线间隔。对于私有数
据区,必须注明其所属的进程。全局数据定义只需注意其用途。

示例如下:

typedef struct

{

char szProductName[20];

char szAuthor[20];


char szReleaseDate[16];

char szVersion[10];

unsigned long MaxTables;

unsigned long UsedTables;

}DBS_DATABASE;

DBS_DATABASE GdataBase;



6 控件的命名:
用小写前缀表示类别

用小写前缀表示类别:
fm 窗口
cmd 按钮
cob combo,下拉式列表框
txt 文本输入框
lab labal,标签
img image,图象
pic picture
grd Grid,网格
scr 滚动条
lst 列表框
frm fram



7注释


原则上注释要求使用中文;

文件开始注释内容包括:公司名称、版权、作者名称、时间、模块用途、背景介绍等,复
杂的算法需要加上流程说明;

函数注释包括:输入、输出、函数描述、流程处理、全局变量、调用样例等,复杂的函数
需要加上变量用途说明;

程序中注释包括:修改时间和作者、方便理解的注释等;





引用一: 文件开头的注释模板


/******************************************************************

** 文件名:

** Copyright (c) 1998-1999 *********公司技术开发部

** 创建人:

** 日 期:

** 修改人:

** 日 期:

** 描 述:


**

** 版 本:

**--------------------------------------------------------------------------
---





******************************************************************/



引用二: 函数开头的注释模板

/*****************************************************************

** 函数名:

** 输 入: a,b,c

** a---

** b---

** c---

** 输 出: x---

** x 为 1, 表示...

** x 为 0, 表示...

** 功能描述:

** 全局变量:

** 调用模块:

** 作 者:

** 日 期:

** 修 改:

** 日 期:

** 版本

****************************************************************/

引用三: 程序中的注释模板

/*----------------------------------------------------------*/

/* 注释内容 */

/*----------------------------------------------------------*/

8 程序

a. 程序编码力求简洁,结构清晰,避免太多的分支结构及太过于技巧性的程序,
尽量不采用递归模式。

b. 编写程序时,亦必须想好测试的方法,换句话说,”单元测试” 的测试方案应
在程序编写时一并拟好。

c. 注释一定要与程序一致。

d. 版本封存以后的修改一定要将老语句用/* */ 封闭,不能自行删除或修改,并要
在文件及函数的修改记录中加以记录。

e. 程序中每个block 的开头 ”{" 及 "}” 必须对齐,嵌套的block 每进一套,
缩进一个tab,TAB 为4个空格,block类型包括if、for、while、do等关键字引出的。

f. 对于比较大的函数,每个block 和特殊的函数调用,都必须注明其功能,举例如下



count.divisor = 1193280 / freq; // compute the proper count

OutByte((unsigned short)67, (unsigned char)182); // tell 8253 that a
count is coming

OutByte((unsigned short)66, count. c[0]); // send low-order byte

OutByte((unsigned short)66, count. c[1]); // send high-order byte



×××××××××××××××××××××××××××××××××××××××

bcb,delphi中的变量命名:

遵循匈牙利命名法,命
名必须有意义,制定如下规定

窗体: 以大写的W开始,如About版权窗体, 命名为WAbout

文件:以大写的F开始,如About版权窗体,文件命名为FAbout.cpp

按钮(Button):如退出按钮,命名为btnExit

……

基类: 加base标记,如报表基类,窗体命名为:WBaseRep, 文件命名为FBaseRep.cpp
xuxn的博客
记录一个程序员成长道路上的点点滴滴
首页
新随笔
联系
订阅
管理
Delphi命名规范
参考VCL的代码,结合笔者近两年来的一些经验,可以简单总结出一套Delphi下常用的命名规范。
类型定义(type)
包括class、record、枚举、procedure/function变量等所有写在type下的类型定义
用大写的T开头,例如TList(class)、TPoint(record)、TAlign(枚举)、TNotifyEvent
(procedure变量)
常量(const)
自定义的简单类型常量(如Integer、Pointer等类型)建议用C开头
也有不少常量是需要根据单词意思推断的,如MaxDateTime(以Max开头,让人从意思上猜到是常量)
字符串常量用S开头(因为字符串常量与简单类型常量在编译时处理方式不同,详情可参考《Delphi源代码分析》2.2.4常量)
类的private成员变量、implementation下的全局变量
用F开头
类里绝对不要出现public成员变量,所有要公开的属性用property或者procedure、function代理出来
interface下的全局变量
interface下最好不要出现全局变量,可以替换为用interface里的function返回implementation下的全局变量值
如果一定要有的话,用G开头
局部变量
用L开头
函数(procedure或function)实参
用A开头
除了这些以外,笔者有一些自己常用的Delphi编程习惯,拿出来跟大家分享,欢迎拍砖。
用项目缩写做名字开头
由于Delphi里没有C++中的namespace或者Java里的package这些概念,所以名字冲突问题比较严重。为了尽量避免这种问题,可以在一个项目的专有全局类型、常量前面加上项目名
称的缩写。例如对于一个叫做MyProject的项目,其下的专属类可以叫做TMPOneClass,常量可以叫做CMPOneNumber,等等。
用function代替全局变量
当我们需要访问剪切板时,会用到Clipboard这个对象,不知道大家有没有注意到,这其实是一个返回TClipboard对象的function,而且还用到了设计模式的Singleton模式。
由于Delphi里调用无参函数可以不写括号,所以很多时候可以把一个function当做一个变量使用,具体怎么用大家可以发散一下思维,Singleton只是其中一个例子。
用Pascal命名法
上面这些命名方式,总得来说是根据Pascal命名法演化而来的。
Pascal命名法的基本思想就是一个名字里如果包含多个单词,每个单词的首字母都要大写,例如ThisIsAnExample。
不建议使用下划线命名法(如this_is_an_example),主要是因为Delphi的变量名自动补全
工具不会自动过滤下划线,手动输入比较累。。。
由于Delphi中变量名对大小写不敏感(如A和a其实是同一个变量,这是跟C语系的语言最大的不同),所以绝对不要尝试用字母大小写区分变量,所有变量最好都用大写字母开头。

MIS系统编码规范
编写本规范目的
编写本规范的目的在于提高代码的可读性与可维护性,规范项目组成员形成一种统一的编码风格,便于代码在项目组成员之间的沟通与交流。解决每个人只能读懂自己编写代码问题,也有利于项目的移交。当前,Delphi 开发工具特别适合于开发应用程序类型的数据库管理系统,C#比较适合开发Web应用的系统,本编码规范主要是针对 Delphi、C# 两种开发工具,说明在编程开发过程中应该注意的一些事项。
在数据库管理系统的开发过程中,所涉及到的基本功能模块可以划分为:编辑模块Edit Module(包括增加与修改)、查询模块Browse Module、统计模块Stat. Module、报表打印模块Report Module、系统公共通用函数模块System Common Function Module、系统统用
数据结构模块System Common Data Type Module以及系统公共的数据库连接访问模块System Data Access。以下将基于这种结构的数据库管理系统,说明代码规范。
本规范主要是根据本人近年来的实际工作中经验与教训,对编码以及代码质量、代码的可控制性上的一个总结,规范本身可能会存在一些不合理的地方,欢迎大家批评指正,便于本规范的不断完善。
模块级编码规范
1、窗体/页面命名规范
通常,带有窗体/页面模块的,窗体命名规则是:Fm/Pg + 操作类型 + 业务名称,操作类型通常包括:编辑(Edt)、查询(Brw)、统计(Stat)、报表(Rpt),业务名称通常和数据库中对应的业务表名称相关。这样,可以很直观看出来该模块和数据库中的哪类业务相关。并且通过操作类型能够知道该窗体的功能。
比如,前台销售模块,数据库中的表名称为:S_Sale_M(销售主表)和S_Sale_S(销售明细表),如果为前台开单业务逻辑模块命名,那么可以把窗体名称取名为:FmEdtSale/PgEdtSale,前台开单查询可以取名为:FmBrwSale/PgBrwSale,前台开单统计可以命名为:FmStatSale/PgStatSale,打印编辑模块单据可以采用(Fm/Pg)RptEdtSale,
打印查询模块结果数据可以采用(Fm/Pg)RptBrwSale。
2、控件命名规范
控件命名规范:控件功能/类别(小写的英文字母)+控件关联数据库字段含义(第一个字母大写),Delphi中,如果与数据库直接关联,用db+控件功能/类别(第一个字母大写)+控件关联数据库字段含义(第一个字母大写)。
1、 编辑控件,文本框规范:Delphi中,edtHandler,表示TEdit控件,它关联到数据库中的Handler字段。Delphi中还有与数据库直接关联的TDBEdit控件,则命名规则为:dbEdtHandler。C#中,txtHandler,表示TextBox控件,关联到数据库的Handler字段。
2、 组合框控件,在Delphi中,cbx作为前缀,加上数据库字段,如果是数据库关联控件,则用dbCbx+数据库字段。在C#中,采用ddl+数据库关联字段,表示DropDownList与数据库字段关联控件。
3、 列表框,在Delphi与C#中,都采用lst控件。Delphi中还有与数据库直接关联的TDBListBox控件,则命名为dbLst+关联字段名称。
4、 复选框,在Delphi与C#语言中,皆采用chk+关联字段,Delphi中采用dbChk+关联字段表示 TDBCheckBox。
5、 单选框,在Delphi与C#中,皆采用rdb表示RadioButton。
6、 标签Label,如果标签在代码中,将利用到它,则标签也需要纳入命名规范,其命名规范为lbl+关联字段。
7、 图片字段,在Delphi与C#中,皆采用img表示Image。
8、 按钮,不管采用何种控件充当按钮角,都用btn+按钮功能。比如,增加按钮,命名规范为:btnNew。
9、 网格控件DataGrid/DBGrid,在Delphi与C#中,皆采用dtg+业务表名称,比如dtgSale,表示网格中显示的是销售内容数据列表。
10、 数据列表,在Delphi与C#中,皆采用dtl+关联字段。
11、 数据存储与访问控件,数据集用ds+关联表名称,数据视图采用dv+关联表名称。Command对象用dbCmd,Connection用dbCnn,DataAdapter用dbDtp。
3、模块命名规范
带窗体功能模块其窗体的命名规范是:Fm/Pg + 操作类型 + 业务名称,那么对应的原文建起命名规范可以采用:操作类型 + 业务名称。比如,前台开单功能模块,窗体名称可以取名为:FmEdtSale/ PgEdtSale,其源文件可以命名为:EdtSale.pas/ EdtSale.aspx。
4、代码编码规范
1)、变量命名规范:模块私有变量命名用m_变量含义名,比如:m_Result表示模块的返回结果值。函数级变量去掉 m_就可以了。
2)、事件里面的代码尽量少(一般不超过5行),采用事件有一个缺点,一旦某事件取消,那么里面的代码也会跟着消失或者成为垃圾代码。如果非得在事件里面写代码,那么里面的代码尽量简介,通常不超过5行,超过5行的可以考虑采用函数或者过程来涵盖事件里面的那些代码。
3)、自定义的函数与过程在前,后面紧跟着事件代码。
4)、可以预先知道的异常,不通过try…except/try…catch来捕捉,通过代码校验来处理。因为系统发出的异常通知,效率比较低下,并且系统开销也较大。
delphi命名规范
2013-07-15 15:03:22| 分类: delphi | 标签: |举报 |字号大中小 订阅
1、变量的命名
    变量的名称应当能够表达出它的用途,例如Sname,SbirthDay等。
    习惯上循环控制变量常常为单个字母,诸如I、J、K等。如果使用更有意义的名称,例如iCount,会使循环更容易被理解。
    布尔变量名必须清楚表示出True和False值的意义,例如IsRight。
2、组件的命名
    组件的命名要能表达出组件的用途和类型。一般采用添加前缀的方式,前半部分表示类型,后半部分表示用途。例如窗体类From一般加frm,按钮类加btn,文本框类加edt。
3、数据模块窗体的命名
    除了要表达数据模块的用途外,一般还加后缀DM。例如员工管理中的数据模块窗体可命名为EmployeesDM。
4、单元文件命名
    单元文件一般应与窗体文件名相同。如果是公用单元文件,除了要表达单元文件的功能外,还要加前缀u。
5、过程与函数的命名
    过程与函数名应当有意义,即从名称可以理解过程或函数的用途。
    完成一个动作的过程最好在名称前加上表示动作的动词为前缀。例如删除Doc格式文件:procedure DeleteDocFile;。
    设置输入参数值的过程名应当以Set为其前缀,例如设置UserName的过程为:procedure SetUserName;。
    获取数值的函数名应当以Get为其前缀,例如获得UserName的函数为:function GetUserName:string;。
6、形式参数的命名
    所有形参的名称都应当表达出它的用途。如果合适的话,形参的名称最好以字母a为前缀。例如:procedure DBLogin(aUserName, aPassword:string);。
7、类命名
    类名除了要能够表达出类的用途外,一般要在类名前加T,接口类名前加I,异常类名前加E。例如:
type
  TCustomFlash = class(TObject);    //自定义Flash类

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。