这章Reading 9: Avoiding Debugging给了我很大的收获,以前一些 ACMer 的不好的代码习惯(当然是为了快速coding)都在这里暴露无遗
First Defense: Make Bugs Impossible
主要是前面讲的一些内容的结合,一方面是编译器做足工作,另外一方面则是人要做足工作
- static checking
- dynamic checking 这里主要是编译器的工作了,e.g. java 的Array overflow, 就比c/c++ 的不检查优秀不少
- Immutability
- immutable references: 加final
- unreassignable references
Second Defense: Localize Bugs
顾名思义就是将bug放在一个很小的范围中,方便定位
defensive programming: Checking preconditions is an example of defensive programming
就是可以在方法入口处检查方法的前置条件
e.g
/**
* @param x requires x >= 0
* @return approximation to square root of x
*/
public double sqrt(double x) {
if (! (x >= 0)) throw new