Skip to content

Comment on The error model of Microsoft's new languageparent

Comments

do you know what contracts are?

Typical contracts are 'assert (arg != null)' or 'assert(arg1.length == arg2.length)' or 'assert (hour >= 0 and hour <= 23)'

yes I know what they are. Use them all the time. But since the post is about if I imagine it's about things like

  if( x < 0 || x > 5 )
    throw new ArgumentOutOfRange();
  if( y == nullptr )
    thwrow new NullRefException();
which should imo be something like
  Contract.AssertInRange( x, 0, 5 );
  Contract.AssertNotNull( y );

I imagine you could do even better with something like PostSharp or Fody.

    public void MyFunction([InRange(0, 5)] int x, [NotNull] object y)
    {
        // ...
    }
I just checked, and in fact Fody can do something just like this [1].

The only downside I see is contracts like this would be hard to write concisely:

    if (useFirstObject == true)
        Contract.AssertNotNull(firstObject);
    else
        Contract.AssertNotNull(secondObject);
[1] https://github.com/Fody/NullGuard

It is possible to write your own contract abbreviators with Code Contracts so I would hope such functionality gets added to the new language. The post does mention however that object invariants are not supported so I do wonder how much Code Contracts are actually influencing it.

AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.