2011-04-23 11 views
8

我注意到Microsoft以奇怪的方式在.NET 4中命名了它们的代码合同相关函数。Contract.Requires vs Contract.Require

它们在“require”和“ensure”的末尾添加“s”,所以有Contract.Requires()和Contract.Ensures(),但不在“assert”和“assume”的末尾,所以有Contract.Assert()和Contract.Assume()。这种差异让我有点困惑。实际上,我真正的问题是,我想在PHP中使用代码合同,所以我写了一些东西来模仿.NET 4中的“合同”类。由于PHP没有内置方法来验证类型的参数,我添加一个方法到我自己的Contract类来做一些验证。我选择“expect”这个词,因为我认为“expect参数'bar'是字符串,但是...”是参数类型错误时的常见消息。问题出现了。我应该将我的方法命名为Contract.Expect(),还是应该将其命名为Contract.Expects()?

我来自非英语国家,很抱歉我英语不好。 可能这实际上是一个英语问题,但我认为只有程序员可以帮助我。如果这个问题在这里不合适,那么很抱歉。

回答

15

我相信EnsuresRequires描述什么方法都需要和/或保证,而AssertAssume命令合同验证

或者换句话说,前两者描述的前提条件/后置条件有关方法的外部接口,而后者两个只是元数据,以帮助合同验证完成它的工作对你方法内。一个与用户有关,但另一个不是。

相关问题