1、基本原则
-
格式化的基本原理
使代码看起来有条理的最大意义莫过于展示出代码的结构。请选择能够更好的给出代码结构而不是使代码更悦目的方法。
-
人和计算机对程序的解读
布局是关于程序结构的有用暗示。计算机可能只关心花括号或者begin/end,而人在看程序时总倾向于从代码的视觉外观获取提示。
-
好布局有什么用
如果程序语句按照有意义的方式布局,高手能比新手更好的记住语句。而当程序乱七八糟时,高手的优势就不明显了。
结构能帮助高手去感知、理解和记住程序的重要特性。编程高手通常会恪守自己的风格,即使和其他高手的风格迥然不同。底线是前后如一的组织程序。
-
把布局作为一种信仰
强调对程序理解的重要性,并把程序结构化成熟知的形式,引发了编程风格不同时是否会影响他人对程序的理解能力的思考。这意味着对编程格式的针轮请起来更像是宗教斗争,而非在讨论哲学。
-
良好布局的目标
- 准备表现代码的逻辑结构
- 始终如一的表现代码的逻辑结构
- 改善可读性
- 经得起修改
2、布局技术
-
空白
空白能够增强可读性,空白包括空格、制表符、换行、空行,是展现程序结构的主要手段。
-
分组
从另一个角度看,空白也是分组。也是确保相关语句成组放在一起。
-
空行
将不相关语句分隔开也很有必要。代码中的一个段落的前面应该加入空行。
-
缩进
用缩进形式显示程序的逻辑结构。作为一项守则,那些逻辑上隶属于某语句的语句都应缩进。
-
-
括号
括号应该用得比你觉得需要的更多。对包含两个以上的项的表达式,应该用括号去澄清之。括号使得语义更加清晰且不会损失什么。
3、布局风格
常见布局风格:
-
纯块结构
有些语言并不要求块结构,并因此会产生很多缩进问题。请为程序添加构成代码块的元素(begin/end或花括号),弥补语言结构上的不良设计。
-
模仿纯块结构
如果语言不支持纯块结构,可以讲关键字begin/end 或{/}看出是所在控制结构的扩展。
- 使用begin-end对(花括号)指定块边界
-
行尾布局
行尾布局是一大组代码缩进至行中间或结尾的布局策略,用来将代码块作为该块开始的关键子对其,是子程序的其余参数与第一个参数对其或在case语句中将各种情况对齐等。
-
哪种风格最优
所有风格都不绝对可靠,都偶尔需要进行合理而明显的折中。
4、控制结构的布局
结构化控制结构的要点:
- 不要用未缩进的begin-end对
- 别让begin-end两次缩进
其他考虑:
- 段落之间要使用空行
- 单语句代码块的格式要前后统一
- 对于复杂的表达式,将条件分隔放在几行上
- 不用goto
- case语句不要有行尾布局的例外
5、单条语句的布局
-
语句长度
- 超过80个字符的语句很难读
- 80个字符的限制不鼓励深度嵌套
- 长于80字符的语句在打印纸上放不下
- 大显示器、横向打印、窄字体等可以避免武断的拆分代码适应80个字符的限制
-
用空格使语句显得清楚
- 使用空格会让逻辑表达式更易读
- 使用空格让数组引用更容易读
- 使用空格让子程序参数更容易读
-
格式化后续行
- 是续行明显
- 把紧密关联的元素放在一起
- 将子程序调用的后续行按标准量缩进
- 让后续行的结尾易于发现
- 将控制语句的后续行缩进以标准的空格数
- 不要将赋值语句按等号对齐
- 对赋值语句后续行按标准量缩进
-
每行仅写一条语句
- 能够提供有关程序复杂性的准确观点
- 多条语句放在一行对于现代编译器没有任何优化线索
- 代码仅需自上而上读,而不必自上而下,还要从左往右去读
- 编译器以行号指出错误时,更容易找出语法错误
- 基于行的调试器中容易单步执行代码
- 编辑单个语句更容易:删除一行或者临时注释某行
- c++中不要让一行里有多高操作(副作用)
-
数据声明的布局
- 每行只声明一个数据
- 变量声明应尽量接近其首次使用的位置
- 合理组织声明顺序
- c++中声明指针变量时,* 号靠近变量名,或者去声明指针类型
6、注释的布局
- 注释的缩进要与代码一致
- 每行注释用至少一个空行分开
7、子程序的布局
- 用空行分隔子程序的各部分
- 将子程序参数按照标准缩进
8、类的布局
-
类接口的布局
- 说明类及其完整用法的头部注释
- 构造函数与析构函数
- public 子程序
- protected 子程序
- private 子程序和数据成员
-
类实现的布局
- 描述类所在文件只内容的头部注释
- 类数据
- public 子程序
- protected 子程序
- private 子程序和数据成员
- 如果文件包含多个类,要清楚的标出每一个类
-
文件和程序布局
- 一个文件应该只有一个类
- 文件的命名应与类名有关
- 在文件中清晰点的分隔各个子程序
- 按字母顺序排列子程序
更多有关《代码大全 2》的读书笔记,请关注 :
http://tabalt.net/blog/code-complete-2-reading-notes/
本文链接:http://tabalt.net/blog/cc2-layout-and-style/,转载请注明。
