4 ms·
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)'
by octo_t 13y ago
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)'
- stinos 13y agoyes 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 );
- adandy 13y agoIt 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.
- taspeotis 13y agoI 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 https://github.com/Fody/NullGuard