||= is much needed?
Herby Vojčík
herby at mailbox.sk
Thu Jun 14 11:12:49 PDT 2012
Herby Vojčík wrote:
>
>
> Brendan Eich wrote:
>> Allen Wirfs-Brock wrote:
>>> While I'm less than enthusiastic about explicitly provided undefined
>>> values triggering default value usages, I don't think it is
>>> particularly harmful. I think treating null equivalently would be.
>>
>> Noted, but you have not responded to the argument, made by Sam
>> Tobin-Hochstadt based on Racket experience, Tab Atkins in Common Lisp,
>> and others, that failing to treat explicit undefined as a defaulting
>> trigger creates an anti-modular, combinatorial explosion when wrapping
>> and delegating. This is the sole reason undefined (or undefined and
>> null, separate issue) as defaulting trigger is proposed. Please respond
>> to it directly.
>>
>>>> > > f = (x, y=1, z=2) -> console.log(x, y, z)
>>>> > f(0, null, undefined)
>>>> > > generates
>>>> > > f = function(x, y, z) {
>>>> > if (y == null) {
>>>> > y = 1;
>>>> > }
>>>> > if (z == null) {
>>>> > z = 2;
>>>> > }
>>>> > return console.log(x, y, z);
>>>> > };
>>>> > > f(0, null, void 0);
>>>> > > We could certainly do worse than to pave this cowpath.
>>>
>>> sure, for example, by having any falsy value trigger default value
>>> usage. But just because there are worse things doesn't make the a good
>>> idea.
>> That's a reductio ad absurdum, nothing to do with why I wrote what I
>> wrote.
>>
>> We have a problem with || indeed. The question is whether the solution
>> should equate null and undefined. CoffeeScript chose the
>> conceal-the-difference path and it has users. The users who want null to
>> be distinct from undefined are neither CoffeeScript users, nor || users
>> (in their defaulting code). They must be doing === undefined test. That
>> is rare too (not quite as rare as passing null instead of undefined as
>> intentional default trigger in my experience).
>>
>> What is your reason for preferring === undefined over == null, since we
>> have a dilemma and users often use an even looser (falsy, viz ||) test
>> than == null, but some use == null and others use === undefined, for the
>> defaulting trigger?
>
> If I can add my own, I use || (because it's short, and if (foo) pattern
> desensitivised me), but if there would be an operator for undefined,
> I'll switch to use it immediately (I always see it as undefined, knowing
> I do sin when using ||).
>
> Btw, |if(foo)| also needs replacement in that case, though if ?? will be
> there, |if (foo??true)| (or |if (foo??1)|) would serve the case well.
Well, sorry, not. This is wrong. ?? can't help. |foo ?? 1 : 0| would,
but it's different matter. "=== undefined" is too long, though.
>> /be
>
> Herby
More information about the es-discuss
mailing list