Re: readability, that's something to think about, but when I write code like 
this:

    if ((typeof num != "number") ||
        (Math.floor(num) != num) ||
        isNaN(num) ||
        (num < 0) ||
        Math.abs(num) == Infinity) {
      throw new Error("This need to be a non-negative whole number");
    }

Well, it adds up.  :)  Even now I can replace the fifth condition with 
!Number.isFinite(num).  

Actually, I've always wondered if validating and throwing early because an 
argument doesn't meet a constraint might be a hint to the underlying JS engine 
that it could convert the argument to a stricter type after the validation for 
performance.  (No floating-point number can get past that throw; it'd have to 
be an unsigned integer.)  But I'm betting the perf gain might not be all that 
great.  If it were, that might justify the readability issue.

Would splitting into two functions help, if the first were arg validation only? 
 (I hope it wouldn't help... but if it did, I'd do it.)

Re: Assert.jsm:  Too bad it's not available in release builds.  Also, isn't it 
generally accepted that asserts are for test and debug code only?  Argument 
validation isn't a debugging-only problem.

A couple other notes:
* XPConnect obviously does some type coercion, but that's a pretty big hammer, 
as Brendan used to put it.
* None of these solutions does anything for workers, particularly since workers 
can't load JSM's.

On Thursday, May 15, 2014 2:38:21 AM UTC-7, Mike de Boer wrote:
> I quite recently wrote Assert.jsm 
> (http://dxr.mozilla.org/mozilla-central/source/testing/modules/Assert.jsm), 
> which you can include like this:
> Components.utils.import("resource://testing-common/Assert.jsm");

> On 15 May 2014, at 11:17, David Rajchenbach-Teller <dtel...@mozilla.com> 
> wrote:
> > I remember opening a bug for this ~2.5 years ago. The answer was that
> > most of these assertions are so trivial to write that putting them in a
> > module would actually make reading the code harder than simpler. I don't
> > think the situation has changed since then.
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to