讲义 S1: Java™ 设计风格指南
概述
编码设计风格是好的软件工程实践中一个很重要的部分,它的目的是写清晰、易于理解的编码,为将来软件的扩展和更新减少必要的工作量。
许多编码模式使软件易于阅读。其中非常重要的因素是命名描述、固定的缩进方式、详实的注解。
你要采用哪一种编码设计风格,我们不在6.170中规定,但是我们希望你的编码清晰、易于理解。本讲义提供一个全面的指导方针,使你可以开发自己有效的编码设计风格。
命名描述
包、类型、变量、分支标号的名称应当能说明它们各自的意义或用途,当然这并不是说命名应当很长,例如,象i和j这样的名称就很好,它在较短的循环中索引比较方便,通过命名规范,程序员就能理解这些变量的意义和用途。
我们介绍一种常用的命名规范,就是用大写字母定义类名,用小写字母定义变量名和包名。还有一些常用的命名规范,例如:命名常量全部用大写字母,我们不要求你遵循所有的命名规范,但你必须选择那些你认为对你有帮助的命名规范,且始终如一地遵循它。
固定的缩进方式
固定的缩进编码经常帮助读者理解你的编码的逻辑结构,通过查看if语句和while循环结束等等使你的程序易于理解。 你应当选择固定的策略,例如不论你把大括号放在if语句的同一行或下一行,或者try-catch-finally是什么格式,你应该一如既往的使用这种风格。用样本风格检查书中的编码,如果此风格能使你工作起来更方便,你就按此风格做下去。
Emacs 提供了一个自动缩进模式。当你把它做为样式之后,你就应当用它来安排你的编码,而且改变之后要重新定义它的格式。即使源文件没有很好地缩进,你也可以为了印刷精细地安排你的编码。
详实的注解
不要在写注解时出错,任何地方,一个错误的或无用的注解比没有注解更糟糕。如果注解信息明显地来源于编码,对读者来说增加注解仅仅是添加了额外的工作量。
i++; // 自增i 这是一个无用的注解
好的注解以简明、清晰的方式增加编码的信息。例如,如果按下面的标准提供注解,其信息是详实的:
- 能够避免让读者阅读到编码。下面的注解能使读者从领会复杂公式影响的努力中解脱出来, 而且陈述了程序员的意图,使公式能得到检查。
// 这是计算所列元素的标准差
//小于截止值
for (int i=0; i<n; i++) {
//...
}
这类注解的一个重要的应用是说明观点并返回函数值,于是客户就没有必要阅读实现来理解如何使用这类函数。
- 解释模糊的步骤和算法。当一些步骤的作用对于编码本身不是很明显时,这一点就显得非常重要。在编码中,你可以用副作用、幻数运算等来解释一些比较怪异的算法。
//表示一个新的传递请求已经准备就绪
//相对于进程,管理器线程开始磁盘传递
// 下次,它醒来并注意到这个变量已经改变了。
buffer_manager.active_requests ++;
- 记录假设。 在什么假设下合理地从事编码工作?
// 缓冲器至少容纳一个字符。
//如果缓冲器为空,则中断处理返回空值
// 调用这个函数
c = buffer.get_next_character();
- 记录不完善的编码。通常编码的第一个版本都不完善;标志哪个版本是错误的非常重要。如果你在作业上花了很多时间,但是提交的程序不能对所有输入正确运行,那么我们期望通过你的编码来显示你理解的局限性。
if (n > 0) {
average = sum / n;
} else {
// XXX需要从前面的迭代中使用衰变的平均值。
// 从现在开始,仅仅使用一个任意值
average = 15;
}
提示:
- 不要先写编码后注解--要边写边注解。以后返回去再注解是不可靠的。
- 我们不要求你象一些软件工程课那样对每一个程序段进行注解,但是你的分数主要地依赖于你编码的清晰度,一些程序对你来说是清晰的,但在读者看来可能并不清晰。因此,为了你的利益,可以在所有的类、字段和方法中添加说明性的注解。
返回顶部