2011-04-23 30 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命令合同驗證

或者換句話說,前兩者描述的前提條件/後置條件有關方法的外部接口,而後者兩個只是元數據,以幫助合同驗證完成它的工作對你方法內。一個與用戶有關,但另一個不是。

相關問題