Am 01.08.2014 05:27, schrieb Walter Bright:
On 7/31/2014 1:11 PM, Daniel Gibson wrote:
I guess in many cases I'd avoid using assert() in fear of breaking my
defensively written program (like that example from earlier: assert(x
!is null);
if(x) { x.foo = 42; }).
I just hang my head in my hands at that code :-)
Really, you're much better off writing something like:
if (x) {
x.foo = 42;
}
else {
writeln("Sack the QA dept. for not testing this code");
abort();
}
which expresses what you intend directly and would be perfectly fine.
Not exactly - in release mode I don't want it to abort.
But it could be rewritten as
if(check(x != null, "Sack the QA dept. for not testing this code")) {
x.foo = 42;
}
where check throws in debug mode and returns false in release mode if
the condition fails.
I just never considered assert() to have the meaning you're giving it,
even though maybe it was always considered to be like that but just not
implemented "properly" by common languages. I wrote a bit more about
this in another reply.
Cheers,
Daniel