我注意到Microsoft以一种奇怪的方式在.NET 4中命名了他们与代码契约相关的函数。
他们在“require”和“ensure”结束时添加“s”,因此有Contract.Requires()和Contract.Ensures(),但不是在“assert”和“assume”的末尾,所以有Contract.Assert()和Contract.Assume()。差异让我有点困惑。
事实上,我真正的问题是,我正在尝试在PHP中使用代码契约,所以我写了一些东西来模仿.NET 4中的“契约”类。因为PHP没有内置方法来验证类型参数,我添加一个方法到我自己的Contract类进行一些验证。我选择“expect”这个词,因为我认为“期望参数'bar'是字符串但是...”是参数类型错误时的常见消息。问题来了。我应该将我的方法命名为Contract.Expect(),还是应该将其命名为Contract.Expects()?
我来自一个非英语国家,对于我可怜的英语很抱歉。 可能它实际上是一个英语问题,但我认为只有程序员可以帮助我。如果这个问题不合适,那就很抱歉。
答案 0 :(得分:15)
我相信Ensures
和Requires
描述了哪些方法需要和/或保证,而Assert
和Assume
是命令合同验证者。
或者换句话说,前两个描述了关于方法的外部接口的前提条件/后置条件,而后两个只是帮助合同验证者为你做的工作的元数据方法。一个与用户相关,但另一个不是。