良好布局的目标
- 准确表现代码的逻辑结构;
- 始终如一地表现代码的逻辑结构;有些布局风格的规则会遇到许多例外,以致很难一直遵守,好的风格能够适应大多数情况。
- 改善可读性;
- 经得起修改;理想的布局方案应该能经得起代码修改的考验。修改某行时不必连带修改其他行的代码。
布局技术
- 合理使用空白;
- 分组;确保想关的语句成组放在一起。
- 空行;
- 缩进;
- 括号;
控制结构的布局
- 主要是合理的控制块缩进;
- 段落之间要使用空行;若在每个代码块儿上面添加合理注释,可以使布局锦上添花。
- 单语句代码块的格式要前后统一;但语句是指 if 后只有一条语句。最好在其前后都加上花括号。
- 对于复杂的表达式,将条件分割放在几行上。
- case 语句不要有行尾布局的例外。
单条语句的布局
- 语句长度;语句长度应限制在 80 个字符以内。
- 使用空格是语句显得清楚;额外的空格极少起负面作用,却使得语句的可读性大大提高,所以尽量多用吧。
- 格式化后续行;程序布局中最恼人的一个问题,就是需要确定如何将较长的语句延续到下一行。断句最简单的方法是将第一行部分做成若其单独时就有明显语法错误的样子。
while ( pathName[ startPath + position ] != ';' && ( ( startPath + position ) <= pathName.length() ) ... totalBill = totalBill + customerPurchases[ customerID ] + SalesTax( customerPurchases[ customerID ] ); ... for ( int employeeNum = employee.first + employee.offset; employeeNum < employee.first + employee.offset + employee.total; employeeNum++ ) { ... }
- 不要对赋值语句按等号对齐;尽管这种缩进看上去不错,但若变量名称改变,或运行将制表符换做空格和以空格或作制表符工具时,要维持已等号对其就会很麻烦。对赋值语句后续行可以按标准量缩进。
- 每行仅写一条语句;
数据声明的布局
- 每行只声明一个数据。这样的话,就容易在声明旁边添加注释,每个声明自成一体也便于修改,只需按列查找而不必通读每一行,从而找到特定变量会容易些。
- 变量声明应尽量接近首次使用的位置。这样减少了 “跨度” 和 “生存期”,便于必要时将代码重构为更小的子程序。
- 合理组织声明顺序。由于同类型的变量在相关操作红使用,按类型分组往往合乎情理。
类实现的布局
类实现通常应按以下顺序布局:
- 描述类所在文件之内容的头部注释;
- 类数据;
- public 子程序;
- protected 子程序;
- private 子程序;
高效注释
高效注释并不浪费时间。注释太多并不比注释太少好,你很容易达到折中点。
注释占用太多时间通常归因于两点。一,注释风格太耗时或枯燥乏味;二,因为说明程序干什么的或不好想出来,所以写注释太难。这通常是你没有真正理解程序的信号。
注释应注意的问题
- 注释的缩进要与相应代码一致。缩进效果是理解程序逻辑结构的辅助工具,好的注释不会妨碍缩进效果。
- 每行注释至少一个空行分开。
- 避免行尾注释;
- 注释代码是应注重 “为何做”,而不是 ”怎么做“;
- 注释全局变量;注释要指出该数据的目的,为何必须是全局数据。
- 应在每个 if,case,循环或者代码段前加上注释;