重构第九章
8.Introduce Assertion(引入断言)
某一段代码需要对程序状态做出某种判断,以assertion(断言)明确表现这种假设。
Example:
class Employee...
private static final double NULL_EXPENSE = -1.0
private double _expenseLimit = NULL_EXPENSE;
private Project _primaryProject;
double getExpenseLimit() {
return (_cxpenseLimit != NULL_EXPENSE) ? _expenseLimit : _primaryProject.getMemberExpenseLimit();
}
boolean withinLimit(double expenseAmount) {
return (expenseAmount <= getExpenseLimit());
}
End:
double getExpenseLimit() {
if(Assert.ON)
Assert.isTure(_expenseLimit != NULL_EXPENSE || _primaryProject != null);
return (_expenseLimit != NULL_EXPENSE) ? _expenseLimit : _orimaryProject.getMenberExpenseLimit();
}
Conclusion:
Assert.ON是一个常量,编译器在编译期会对它进行检查,如果它等于false,就不再指向条件式后半段代码。
Assertions可以作为交流与调试的辅助,在交流的角度上,assertions可以帮助阅读者理解代码的假设;在调试的角度上,assertions可以在距离bug最近的地方抓住它。
如果程序在不满足某些约束条件,程序也可以正常运行。assertions就不会带来任何的方便,并且可能妨碍以后的修改。
注意
重构必须在有单元测试的情况下,保证之前的功能修改后不收影响。切记!!!
网友评论