知识卡片

契约划清责任

普通读书笔记卡 · 1711

内容

方法契约用前置条件、后置条件和惩罚区分调用者责任与实现者责任。前置条件被破坏通常是调用者错误,后置条件被破坏则是方法内部错误。发散:契约越清楚,缺陷定位越少靠争论。

参考来源

- 位置:《你真的会写代码吗-2021》第5章《有自我意识的代码:通过监控实现可靠性》"5.1.1 前置条件和后置条件"(源文件:_epub-src/OEBPS/Text/0015.xhtml) - 结论依据:原文明确"遵守被调用方法的前置条件是调用者的责任……方法本身可以被动地假设前置条件成立",并以`Iterator::next`为例:"当迭代器已经到达末尾时,调用next方法就会违反前置条件,并且这是一个客户端错误……如果next方法的内部实现没有使迭代器前进到下一个元素,则违反了后置条件……错误发生在方法本身内部"。 - 原始内容:遵守被调用方法的前置条件是调用者的责任……当迭代器已经到达末尾时,调用next方法就会违反前置条件,并且这是一个客户端错误(错误发生在next方法外部)。相反,如果next方法的内部实现没有使迭代器前进到下一个元素,则违反了后置条件。在这种情况下,错误发生在方法本身内部。