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

Reply via email to