世界上没有完美的代码,也没有完美的程序员。只有防卫性地编码和注重实效地程序员。
按合约设计(DBC)
Design with Contracts.通过合约进行设计
用合约的方法帮助软件模块进行交互;
程序做它生命要做的事情,用文档记载这样的声明,并进行校验;
例程对世界状态的期望:
前条件(precondition):调用例程必须的条件;
后条件(postcondition):例程完成后世界的状态;
类不变项(class invariant):类确保从调用者角度看,条件总为真;
Liskov替换原则:子类必须要能通过基类的接口,而使用者无须知道其区别;
实现DBC:断言与语言支持(Java:iContract)
不变项的用法:1.循环不变项;2.语义不变项
死程序不说谎
Crash Early.早崩溃
有时候宁愿要程序崩溃,也千万不要让它把坏数据写入;
检查每一个可能的错误——特别是意料之外的错误——是一种良好的实践;
断言式编程
If It Can’t Happen,Use Assertions to Ensure That Won’t.
如果它不可能发生,用断言确保它不会发生
不能用断言代替真正的错误处理
Java断言类实现
import java.lang.System;
import java.lang.Thread;
public class Assert{
public static void TEST(Boolean conition){
if(!conition){
System.out.println(“Assertion Failed”);
Thread.dumpStack();
System.exit(1);
}
}
}
如何使用异常
Use Exceptions for Exceptional Problems.将异常用于异常问题
对于出错或可能出错的地方尽量使用异常抛出,if来if去多麻烦。
怎么配平资源
Finish What You Start.要有始有终
记得释放你的资源,否则世界会因为你占有太多资源不堪重负,最终崩溃;
嵌套分配
1. 以与资源分配的次序相反的次序解除资源的分配;
2. 在代码的不同地方分配同一组资源时,总是以相同的次序分配它们;
无论是谁分配的资源,它都应该负责解除该资源的分配;
在Java开发中使用完某个对象都,将其设为NULL,这可以使垃圾回收器将它自动回收。