assert(obj) is a mystery
Alex Rønne Petersen
xtzgzorex at gmail.com
Wed Nov 9 05:39:44 PST 2011
On 09-11-2011 11:33, Jonathan M Davis wrote:
> On Tuesday, November 08, 2011 21:51:46 Davidson Corry wrote:
>> OK. Not addressing Alex's objections at all, it's not clear to me why
>> anyone would *need* to test the invariant of an object.
>
> I wouldn't expect it to be something that you'd need to do very often.
> However, if you give access to the member variables in your class or struct -
> either directly or indirectly - allowing code outside the type to modify that
> type's state, then the invariant can be violated. Now, it's arguably bad
> design to allow such access when using an invariant (if not in general), but
> it _is_ a case where the invariant can be invalidated.
>
> - Jonathan M Davis
I do think Good Practice (TM) dictates that you shouldn't expose
something as mutable if mutating it violates the object's invariant.
Instead, you should use a property with preconditions.
In light of this, I can actually see why assert(obj) testing the
invariant can seem very, very odd. (And I mean, nobody's going to write
assert(this) or something like that...)
- Alex
More information about the Digitalmars-d-learn
mailing list