• 代码规范


    1.排版

    1-1:程序块要采用缩进风格编写,缩进为一个Tab。

    说明:对于由开发工具自动生成的代码可以有不一致。

    1-2:相对独立的程序块之间、变量说明之后必须加空行。

    示例:如下例子不符合规范。

    if (!valid_ni(ni))
    {
    ... // program code
    }
    repssn_ind = ssn_data[index].repssn_index;
    repssn_ni = ssn_data[index].ni;
    

    应如下书写

    if (!valid_ni(ni))
    {
    ... // program code
    }
    
    repssn_ind = ssn_data[index].repssn_index;
    repssn_ni = ssn_data[index].ni;
    

    1-3:较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,
    操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。

    1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低
    优先级操作符处划分新行,操作符放在新行之首。

    1-5:若函数或过程中的参数较长,则要进行适当的划分。

    1-6:不把多个短语句写在一行中,即一行只写一条语句。

    示例:如下例子不符合规范。

    rect.length = 0; rect.width = 0;
    

    应如下书写

    rect.length = 0;
    rect.width = 0;
    

    1-7:if、 for、 do、 while、 case、 switch、 default等语句自占一行,且if、 for、
    do、 while等语句的执行语句部分无论多少都要加括号{}。

    1-8:对齐使用Tab

    1-9:函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格, case 语句下的情况处理语句也要遵从语句缩进要求。

    1-10:程序块的分界符(如C/C++语言的大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、 for、do、while、switch、case语句中的程序都要采用如上的缩进方式。

    示例:如下例子不符合规范。

    for (...) {
    ... // program code
    }
    if (...)
        {
        ... // program code
        }
    

    应如下书写

    for (...)
    {
    ... // program code
    }
    if (...)
    {
    ... // program code
    }
    

    1-11:在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如->),后不应加空格。

    (1) 逗号、分号只在后面加空格。

    (2)比较操作符, 赋值操作符"="、"+=",算术操作符"+"、"%",逻辑操作符"&&"、"&",位域操作符"<<"、 "^"等双目操作符的前后加空格。

    (3)"!"、 "~"、 "++"、 "--"、 "&"(地址运算符)等单目操作符前后不加空格。

    (4)"->"、 "."前后不加空格。

    2.注释

    2-1:适当添加注释,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。

    2-2:函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。

    2-3:边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。

    2-4:避免在注释中使用缩写

    2-5:注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。

    2-6:避免在一行代码或表达式的中间插入注释。

    3.命名约定

    3-1:类命名:大驼峰式命名法(upper camel case)

    类名以大写字母开头,不包含下划线: MyExcitingClass、 MyExcitingEnum。所有类、结构体、类型定义(typedef)、枚举—均使用相同约定。
    例如:

    // classes and structs
    class UrlTable { ...
    class UrlTableTester { ...
    struct UrlTableProperties { ...
    // typedefs
    typedef hash_map<UrlTableProperties *, string> PropertiesMap;
    // enums
    enum UrlTableErrors { ..
    

    类成员以m_开头,后使用小驼峰式命名法,如: m_charNum, m_phraseLen

    类方法使用遵循小驼峰式命名法,第一个单词以小写字母开始,第二个单词开始首字母大写。如:getCharNum(), getWordNum()

    3-2:变量命名:小驼峰式命名法(lower camel case)

    第一个单词以小写字母开始,第二个单词的首字母大写。例如:firstName、lastName。

    3-3:函数命名:大驼峰式命名法

    每个单词首字母大写。如:MyExcitingFunction()、MyExcitingMethod()

    3-4:命名中若使用特殊约定或缩写,则要有注释说明。

    3-5:对于变量命名,禁止取单个字符(如i、j、k...),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i、 j、 k作局部循环变量是允许的。

    3-6:除非必要,不要用数字或较奇怪的字符来定义标识符。

    4.可读性

    4-1:注意运算符的优先级,并用括号明确表达式的操作顺序, 防止阅读程序时产生误解

    //示例:下列语句中的表达式
    word = (high << 8) | low (1)
    if ((a | b) && (a & c)) (2)
    if ((a | b) < (c & d)) (3)
    //如果书写为
    high << 8 | low
    a | b && a & c
    a | b < c & d
    //由于
    high << 8 | low = ( high << 8) | low,
    a | b && a & c = (a | b) && (a & c),
    //(1)(2)不会出错,但语句不易理解;
    //a | b < c & d = a | (b < c) & d, (3)造成了判断条件出错。
    

    4-2:避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的枚举或宏来代替。

    不要使用难懂的技巧性很高的语句,除非很有必要时

    示例:如下表达式,考虑不周就可能出问题,也较难理解。
    * stat_poi ++ += 1;
    * ++ stat_poi += 1;
    应分别改为如下。
    *stat_poi += 1;
    stat_poi++; // 此二语句功能相当于“ * stat_poi ++ += 1;
    ++ stat_poi;
    *stat_poi += 1; // 此二语句功能相当于“ * ++ stat_poi += 1;
    

    5.程序效率

    8-1:编程时要经常注意代码的效率

    8-2:在保证软件系统的正确性、稳定性、可读性及可测性的前提下,提高代码效率。

    8-3:局部效率应为全局效率服务,不能因为提高局部效率而对全局效率造成影响。

    8-3:在传参时,如果传的数据较大,为避免进行数据拷贝的消耗,可以考虑使用引用或指针。

    8-4:考虑采用更优的算法代替较差的算法,例如:在一些情况下,可以考虑用快排代替冒泡排序。

    6.质量保证

    9-1:只引用属于自己的存贮空间。

    9-2:防止引用已经释放的内存空间。

    9-3:函数中分配的内存,函数退出之前要释放。

    9-4:过程/函数中申请的(为打开文件而使用的)文件句柄,在过程/函数退出之前要关闭。

    9-5:防止内存操作越界。

    9-6:编程时,要防止差1错误。

    说明:此类错误一般是由于把“<=”误写成“<”或“>=”误写成“>”等造成的,由此
    引起的后果,很多情况下是很严重的,所以编程时,一定要在这些地方小心。当编完程序后,应对这些操作符进行彻底检查。

    9-7:不用goto语句。
    说明: goto 语句会破坏程序的结构性,所以除非确实需要,最好不使用 goto 语句。

    9-8:注意功能的独立封装

    方便单元测试和将来的代码复用

    多交流、多沟通是最好的规范。

  • 相关阅读:
    WebApi开启CORS支持跨域POST
    VueJs生产环境部署
    VueJs开发笔记—IDE选择和优化、框架特性、数据调用、路由选项及使用
    微信分享JSSDK-invalid signature签名错误的解决方案
    关于后台系统自动生成的一点思考
    编写高质量代码改善C#程序的157个建议[为类型输出格式化字符串、实现浅拷贝和深拷贝、用dynamic来优化反射]
    编写高质量代码改善C#程序的157个建议[10-12]
    编写高质量代码改善C#程序的157个建议[4-9]
    编写高质量代码改善C#程序的157个建议[正确操作字符串、使用默认转型方法、却别对待强制转换与as和is]
    Oracle初级索引学习总结
  • 原文地址:https://www.cnblogs.com/mercuialC/p/9769758.html
Copyright © 2020-2023  润新知