美文网首页
第3章 间隔相关编码准则

第3章 间隔相关编码准则

作者: FelixDai | 来源:发表于2019-08-02 15:27 被阅读0次

    3.1 一行只写一条语句

    此处所谓的“行”(line)值得是在编辑器上显示的行,而不是C语言的一条“语句”。

    3.2 区分声明语句和执行语句

    通过插入空行进行区分声明语句和执行语句。

    分析语句对数据会产生何种“直接”影响,可以轻松区分声明语句和执行语句。无论是输出、输入数据,或内存中的保存数据,只要是对数据进行处理和操作的语句,都可以视为执行语句。当然,比较数据的条件语句也是执行语句之一。

    代码越长,该准则带来的效果越明显。特别是对于C++程序中变量声明位于程序中段的情况,更要注意遵循这一准则,即在声明语句前后各插入一行空行进行标注。

    3.3 区分段落

    在编写程序时,无论是声明语句还是执行语句,都应该注意将相似的部分集中在一起。有经验的程序员会有意将负责相似功能的执行语句集中在一起,并在其前后插入空行,以便区分于其他语句。

    程序编写者应该按一下5部分分段编写函数内容:

    • 包含标准库的预处理命令
    • 定义字符串常量的预处理命令
    • 声明用户信息相关的结构体
    • 声明从插入、更新、删除功能中三选一的函数原型
    • 声明插入、更新、删除相关的函数原型

    3.4 区分各种控制语句

    表达统一思想的段落内部也应该插入空行,以划分更细的层次。最常见的情况是针对控制语句。

    控制语句担负着改变程序执行顺序的作用,不同假定条件、不同情况下如何进行选择或循环,都由这些控制语句决定,直接关系到程序执行顺序是否正确。

    if (num1 == num2)
        printf("%d和%d相同。\n", num1, num2);
    
    if (num1 != num2)
        printf("%d和%d不同。\n", num1, num2);
    
    if (num1 < num2)
        printf("%d小于%d。\n", num1, num2);
    

    switch语句适用的准则整理如下。switch语句越长、越复杂,该准则的作用就越强大。

    1. switch语句开始部分单独占据一行
    2. 以空行区分各case语句
    3. 像case语句一样,用空行隔开default语句,以示区分

    对于相互重叠的多种控制结构,每次变换控制语句的种类时都插入空行。

    3.5 区分各函数

    函数之间无空行的缺点:

    1. 难以掌握函数的起始位置和结束位置
    2. 难以了解程序由几个函数组成
    3. 难以定位某个特定函数

    建议各函数之间最少插入两个空行,因为这样可以保证各函数之间的间距更大,如果依序阅读函数内部代码时,如果遇到间距较大的位置,就能自然而然地意识到下面开始是一个新的函数。

    3.6 运算符前后需留出空格

    3.7 不要在一元运算符与操作数之间插入空格

    3.8 分号前不要插入空格

    有时,人们会在分号前面插入若干空格,以对齐各语句末尾部分。但这种情况也会导致疑问:“分号和语句之间是否漏掉了某些标识符?”,因此,不要在分号前插入空格。

    3.9 不要滥用Tab键

    3.10 逗号后必须插入一个空格

    更容易区分各参数

    3.11 逗号后不要插入太多空格

    过多空格同样会损害代码可读性。如果要表示强调,可以按照特定格式,通过添加注释强调特定语句。

    3.12 变量初始化时的列对齐

    int main(int, int) {
        int enterYear = 2012;
        int enterMonth = 01;
        int exitYear = 2015;
        int exitMonth = 12;
        int newItemStock = 0;
        int newItemFlow = 0;
        long double statofNewItemStock = 0;
        long double statofOldItemStock = 0;
        double bankCredit = 0;
        double bankDebit = 0;
        // ……略……
    }
    

    将变量的声明语句和执行语句分别集中到不同部分,这样有利于管理变量。并且还可以使用Tab键,对齐各变量初始值所在列,如下所示:

    int main(int, int) {
        int enterYear         = 2012;
        int enterMonth        = 01;
    
        int exitYear          = 2015;
        int exitMonth         = 12;
    
        int newItemStock      = 0;
        int newItemFlow       = 0;
    
        long double statofNewItemStock = 0;
        long double statofOldItemStock = 0;
    
        double bankCredit     = 0;
        double bankDebit      = 0;
        // ……略……
    }
    

    这种对齐初始值所在列的方法很常见。但如果仅仅为了遵守公司“对齐初始值所在列”的编码规则而机械化地对齐,反而会损害代码可读性。公司制定这条规则地本意是,在提高而不是损害可读性地范围内对齐列。因此,应该在合适地范围内,即不能插入过多空格地前提下,对齐初始值所在列。

    int main(int, int) {
        int enterYear  = 2012;
        int enterMonth = 01;
    
        int exitYear   = 2015;
        int exitMonth  = 12;
    
        int newItemStock  = 0;
        int newItemFlow   = 0;
    
        long double statofNewItemStock = 0;
        long double statofOldItemStock = 0;
    
        double bankCredit = 0;
        double bankDebit  = 0;
        // ……略……
    }
    

    总之,初始值应该按列对齐,但也要考虑变量的含义,通过空格的多少控制不同含义的变量初始值在不同位置对齐。

    3.13 一行只声明一个变量

    有些程序员会在同一行声明多个变量,如下所示:

    int number1, number2, number3;
    double number4, number5, number6;
    

    无论这种形式的标记方法是否简便,它都存在其他问题。仅从程序的标记形式看,似乎并没有什么问题。但实际上,C编译器会将上述变量声明代码翻译为如下形式:

    int number1, int number2, int number3;
    double number4, int number5, int number6;
    

    为什么会这样呢?在C语言中,如果变量前面没有指明变量类型,那么会默认将变量的数据类型指定为int型。这也就导致了与程序员意愿相违背的编译结果。

    因此,如果考虑准备制定编码风格规则,那么应该规定“一行只声明一个变量”。

    相关文章

      网友评论

          本文标题:第3章 间隔相关编码准则

          本文链接:https://www.haomeiwen.com/subject/ycccdctx.html