后置条件

时间:2019-04-18 23:01:35

标签: c# preconditions bosque

我只是在阅读Bosque编程语言的文档,偶然发现section 12有关错误和检查

我想知道C#是否具有与发布和前提条件类似的概念。 乍一看,我认为这看起来像是保护子句,但是从语言的角度来看,根本没有进入这些前提条件的方法。

由于文档是相当新的,因此我将在此处发布我正在谈论的源代码:

entity Foo {
    field x: Int;

    invariant x > 0; //check whenever a Foo is constructed

    method m(y: Int): Int
        requires y >= 0; //precondition
        ensures _result_ > 0; //postcondition
    {
        check this.x - y > 0;   //sanity check - enabled on optimized builds
        assert this.x * y != 0; //diagnostic assert - only for test/debug

        return x * y;
    }
}

在C#中,我通常会这样写

internal class Foo 
{
    private int x;

    public int  m(int y)
    {
        if(y<0) //Negative guard clause
        {
            //throw an exception
        }
        //Assertions 
        int result = x * y;

        if(result<0)
        {
            //throw an exception
        }
        return result;
    }
}

在撰写此问题时,我遇到了C#中的代码契约,其行为与看似保护子句的行为类似。在我看来,C#中的Contract.Requires更像方法内部的checkassert语句。

所以我的问题是: 在输入方法之前或之后出现后置条件的情况下,是否存在类似的概念?

0 个答案:

没有答案