8

我注意到微软在 .NET 4 中以一种奇怪的方式命名了他们的代码合同相关函数。

他们在“require”和“ensure”的末尾添加“s”,所以有Contract.Requires()和Contract.Ensures(),但没有在“assert”和“assume”的末尾,所以有Contract .Assert() 和 Contract.Assume()。这种差异让我有点困惑。

事实上,我真正的问题是,我正在尝试在 PHP 中使用代码合同,所以我写了一些东西来模仿 .NET 4 中的“合同”类。由于 PHP 没有内置方法来验证参数的类型,我在自己的 Contract 类中添加了一个方法来进行一些验证。我选择“expect”这个词,因为我认为“expect parameter 'bar' to be string but...”是参数类型错误时的常见消息。问题来了。我应该将我的方法命名为 Contract.Expect() 还是应该命名为 Contract.Expects()?

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

4

1 回答 1

15

我相信Ensures并且Requires正在描述哪些方法需要和/或保证,而AssertAssume对合约验证者的命令

或者换句话说,前两个描述了方法外部接口的前置条件/​​后置条件,而后两个只是元数据,帮助合约验证者在方法内部为你完成工作。一个与用户相关,而另一个与用户无关。

于 2011-04-23T08:25:19.433 回答