重构手法41:Introduce Assertion (引入断言)

某一段代码需要对程序状态做出某种假设。以断言明确表现这种假设。

动机:常常会有这样一段代码:只有当某个条件为真时,该段代码才能正常运行。

       这样的假设通常并没有在代码中明确表现出来,你必须阅读整个算法才能看出。有时程序员会以注释写出这样的假设。可以使用断言明确标明这些假设。

       断言是一个条件表达式,应该总是为真。如果它失败,不是程序员犯了错误。因此断言的失败应该导致一个非受控异常。断言绝对不能被系统的其他部分使用。实际上,程序最后的成品往往将断言删除。因此,标记“某个东西是个断言”是很重要的。

       断言可以作为交流与调试的辅助。在交流的角度上,断言可以帮助程序阅读者了解代码所做的假设;在调试的角度上,断言可以在距离bug最近的地方抓住它们。

做法:如果程序员不犯错,断言就应该不会对系统造成任何影响,所以加入断言永远不会影响程序的行为。

       如果你发现代码假设某个条件始终为真,就加入一个断言明确说明这种情况。

       注意,不要滥用断言。清不要使用它来检查“你认为应该为真”的条件,清只使用它来检查“一定必须为真”的条件。滥用断言可能会造成难以维护的重复逻辑。在一段逻辑中加入断言是有好处的,因为它迫使你重新考虑这段代码的约束条件。如果不满足这些条件约束,程序也可以正常运行,断言就不会带给你任何帮助,只会把代码变得混乱,并且有可能妨碍以后的修改。

       你应该常常问自己:如果断言所指示的约束条件不能满足,代码是否仍能正常运行?如果可以,就把断言拿掉。

       另外,还需要注意断言中的重复代码。你可以大胆使用Extract Method(提炼函数)去掉那些重复代码。

 

你可能感兴趣的:(assert)