2022年程序编写规则 2.pdf
程序编写规范一、程序编写原则A、基本要求1、程序结构要求1.1 程序结构清晰,简单易懂,单个函数的程序行数不得超过100 行。1.2 打算干什么,要简单,直截了当,代码精简,避免垃圾程序。1.3 尽量使用 .NET 库函数和公共函数(无特殊情况不要使用外部方法调用windows 的核心动态链接库 )。1.4 不要随意定义全局变量,尽量使用局部变量。2、可读性要求2.1 可读性第一,效率第二 (代码是给人读的 J)。2.2 保持注释与代码完全一致。2.3 每个源程序文件,都有文件头说明,说明规格见规范。2.4 每个函数,都有函数头说明,说明规格见规范。2.5 主要变量(结构、联合、类或对象)定义或引用时,注释能反映其含义。2.6 处理过程的每个阶段都有相关注释说明。2.7 在典型算法前都有注释 , 同时算法在满足要求的情况下尽可能简单。2.8 利用缩进来显示程序的逻辑结构, 缩进量一致并以 Tab键为单位,定义 Tab为 6 个字节。2.9 循环、分支层次尽量不要超过五层。2.10 注释可以与语句在同一行,也可以在上行。2.11 空行和空白字符也是一种特殊注释。2.12 一目了然的语句不加注释。2.13 注释的作用范围可以为:定义、引用、条件分支以及一段代码。2.14 注释行数(不包括程序头和函数头说明部份)应占总行数的1 / 5 到 1 / 3 2.15 常量定义( DEFINE)有相应说明。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 程序首先是正确,其次是优美名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 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 思想,减少外界联系,考虑独立性或封装性。B、程序优化及注意点二、程序注释规范程序注释规范包括:源文件注释规范、类注释规范、自定义方法函数注释规范、代码间注释。1、源文件注释规范建议的源文件头部注释示例如下:/* * 文件名:* 创建人:* 日期:* 描述:* 修改记录:*/2、类注释规范A、类开始部分必须以如下形式书写注释:/* * 类编号: * 描述: * 作者:作者中文名* 编写日期: */ 类头还需要 xml 格式的注释说明该类用处,donet 在外部调用该类时会将此注释显示出来,更利于对此类的了解。格式如下:/ /租车记录实例类/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - B、类属性注释在类的属性前必须以如下格式编写属性注释。/ /属性说明(如:出生日期)/ 3、自定义方法函数注释规范/ / ( 描述 ) 设置车辆信息/ / 车辆信息类 4、代码注释规范A、一个函数中有多个if、else、for 等嵌套时,可用空格或是空行来进行区分(特殊的注释)或是在条件结束时加入注释,例如:privatevoid Example() if ( 条件 1 ) if ( 条件 2 ) for ( int i = 0; i 10;i+ ) if ( 条件 3) / end for (int i = 0; i 10;i+ ) / end if (条件 2) / end if (条件 1)else B、一个业务逻辑较强的功能函数需要对详细步骤做详细注释。C、一个页面代码中若功能类似的函数均使用外侧代码(即用#region 与#endregion注释代码)进行说明,以保证代码的整洁。例如: #region Form1事件privatevoid Form1_Load( object sender, EventArgs e) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - / 窗体加载事件 privatevoid Frm_Main_FormClosed( object sender, FormClosedEventArgs e) / 窗体关闭事件 #endregion三、程序命名规范据考察,没有一种命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则。命名规则对软件产品而言并不是成败悠关 的事,我们不要花太多精力试图发明世界上最好的命名规则,而应当制定一种令大多数项目成员满意的命名规则,并在项目中贯彻实施。共性规则:是被大多数程序员采纳的,我们应当在遵循这些共性规则的前提下,再扩充特定的规则。【规则 1】标识符应当直观且可以拼读,可望文知意,不必进行解码 。标识符最好采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。程序中的英文 单词一 般 不会太 复杂,用词应当准 确。例如不要把CurrentValue写成 NowValue。【规则 2】标识符的长度应当符合min-length & max-information原则。几十年前老 ANSI C 规定名字不准超过6 个字符,现今的 C+/C 不再有此限制。一般来说,长名字能更好地表达含义,所以函数名、变量名、类名长达十几个字符不足为怪。那么名字是否越长约好?不见得! 例如变量名 maxval 就比maxValueUntilOverflow 好用。单字符的名字也是有用的,常见的如i,j,k,m,n,x,y,z等,它们通常可用作函数内的局部变量。【规则 3】程序中不要出现仅靠大小写区分的相似的标识符。例如:int x, X;/ 变量 x 与 X 容易混淆void foo(int x);/ 函数 foo 与FOO 容易混淆void FOO( float x);【规则 4】程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但会使人误解。【规则 5】变量名命名规则:类型缩写(详见附表1)+下划线 +名称名称:使用 名词或者形容词名词 例如:string str_Value;float f_OldValue;1 常量全用大写的字母,用下划线分割单词名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - 例如:constint MAX = 100; constint MAX_LENGTH = 100;2 静态变量加前缀 s_(表示 static)例如:staticint s_initValue;/ 静态变量3 全局变量加前缀 g_(表示 global)例如:int g_howManyPeople; / 全局变量int g_howMuchMoney;/ 全局变量【规则 6】全局函数的名字应当使用 动词或者动词名词 (动宾词组)。类的成员函数应当只使用 动词,被省略掉的名词就是对象本身。例如:privatevoid DrawBox();/ 全局函数【规则 7】尽量避免名字中出现数字编号,如 Value1,Value2等,除非逻辑上的确需要编号。这是为了防止程序员偷懒,不肯为命名动脑筋而导。【规则 8】类名和函数名用大写字母开头的单词组合而成。例如:publicclassRentRecordprivatevoid Draw();/ 函数名privatevoid SetValue(int value);/ 函数名【规则 9】类的数据成员加下划线(表示member) ,这样可以避免数据成员与成员函数的参数同名。例如:/ 类成员privateint _width; privateint _height;/ 类成员函数privatevoid SetValue(int width, int height) _width = width; _height = height; 四、程序版本号确定规范主程序的版本号格式: V+主版本号十次版本号 +(Fix 版本号)说明:主版本号表示程序的重大修改, 如修改或增加改进了程序的重要功能。次版本号表示程序的一般修改,如修改或改进程序的一般功能。Fix 版本号表示程序 Bug 的修改,以修改的日期缩写表示,如2006-8-20 修改的 Fix 版本号就是060820。举例:程序版本号为 V1.2(060820) ,表示该程序的主号是1,次版本号为 2,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - Fix 版本号为 060820。五、附录附表 1(常用类型及控件缩写)1 ADO.NET 命名规范数据类型数据类型简写标准命名举例Connection con con_Northwind Command cmd cmd_ReturnProducts Parameter parm parm_ProductID DataAdapter da da_Products DataReader dr dr_Products DataSet ds ds_NorthWind DataTable dt dt_Product DataRow drow drowProductId DataColumn dcol dcol_ProductName DataRelation drel drel_MasterDetail DataView dv dv_FilteredProducts 2 WinForm Control 命名规范数据类型数据类型简写标准命名举例Label lbl lbl_Message LinkLabel linklbl linklbl_Today Button btn btn_Save TextBox txt txt_Name MainMenu mmnu mmnu_File CheckBox chk chk_Stock RadioButton rbtn rbtn_Selected GroupBox gbx gbx_Main 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - PictureBox pic pic_Image Panel pnl pnl_Body DataGrid dg dg_View ListBox lst lst_Products CheckedListBox clst clst_Checked ComboBox cbx cbx_Menu ListView lv lv_Browser TreeView tv tv_Type TabControl tctl tctl_Selected DateTimePicker dtp dtp_StartDate HscrollBar hsb hsb_Image VscrollBar vsb vsb_Image Timer tmr tmr_Count ImageList ilst ilst_Image ToolBar tlb tlb_Manage StatusBar stb stb_FootPrint OpenFileDialog odlg odlg_File SaveFileDialog sdlg sdlg_Save FoldBrowserDialog fbdlg fbdlg_Browser FontDialog fdlg fdlg_Foot ColorDialog cdlg cdlg_Color PrintDialog pdlg pdlg_Print 3 WebControl 命名规范数据类型数据类型简写标准命名举例AdRotator adrt adrt_Example Button btn btn_Submit 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - Calendar cal cal_MettingDates CheckBox chk chk_Blue CheckBoxList chkl chkl_FavColors CompareValidator valc valcValidAge CustomValidator valx valxDBCheck DataGrid dg dg_Titles DataList dl dl_Titles DropDownList ddl ddl_Countries HyperLink hlnk hlnk_Details Image img img_AuntBetty ImageButton imgbtn imgbtn_Submit Label lbl lbl_Results LinkButton lbtn lbtn_Submit ListBox lst lst_Countries Panel pnl pnl_Form2 PlaceHolder plh plh_FormContents RadioButton rbtn rbtn_Female RadioButtonList rblst rblst_Gender RangeValidator valg valg_Age RegularExpression vale vale_EmailValidator Repeater rpt rpt_QueryResults RequiredFieldValidator valr valr_FirstName Table tbl tbl_CountryCodes TableCell tblc tblc_Germany TableRow tblr tblr_Country TextBox txt txt_FirstName 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - ValidationSummary vals vals_FormErrors XML xmlc xmlc_TransformResults 参考:匈牙利命名规则、骆驼命名法、帕斯卡(pascal )命名法名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -