Proposal: anaphoric if and while syntax

Bob Myers rtm at gol.com
Mon Oct 3 22:45:39 UTC 2016


I often find myself wanting to do this in the case of `while`. I've been
writing

```
for (let a; a = someLongCondition();) { doSomethingWith(a); }
```

In that spirit, an oddball proposal:

```
while (let a = someLongCondition(); a) { ...use a... }
if (let a = someLongCondition(); a) { ...use a... }
```

On Fri, Sep 16, 2016 at 2:39 AM, Isiah Meadows <isiahmeadows at gmail.com>
wrote:

> I say let's hold off until JavaScript gets pattern matching support
> (assuming it does). It's rather limiting otherwise, and the use case IMHO
> doesn't really merit a new syntax for it.
>
> On Thu, Sep 15, 2016, 15:47 Jeremy Martin <jmar777 at gmail.com> wrote:
>
>> > If yes ... why would anyone write that ?
>>
>> I think it would have to be "yes" (and that's probably just a contrived
>> example that doesn't demonstrate the usefulness).
>>
>> Slightly less contrived, I could see the value in this, though. E.g.,
>>
>> ```
>> router.get('/user', (req, res, next) => {
>>     if (let user = req.session.user) {
>>         // do stuff with user here
>>     } else {
>>         res.status(401).end();
>>     }
>> });
>> ```
>>
>> I don't think it works as cleanly with `var`, but `const` and `let` has
>> some nice precedence with for-statements.
>>
>>
>> On Thu, Sep 15, 2016 at 2:45 PM, Andrea Giammarchi <
>> andrea.giammarchi at gmail.com> wrote:
>>
>>> > if( let a = ( let b = 10 ) * 3 > 10 )
>>>
>>> I've honestly no idea, at first/quick read, what the hell that would
>>> produce.
>>>
>>> Is `a` going to be just `true` ? 'cause if not, this proposal violates
>>> operator precedence.
>>>
>>> If yes ... why would anyone write that ?
>>>
>>> On Thu, Sep 15, 2016 at 7:30 PM, J Decker <d3ck0r at gmail.com> wrote:
>>>
>>>> Why not more generally - allow let/var declarations in expressions?
>>>>
>>>> coming from a long and rich C background, I have no issues with the
>>>> existing mechanisms... but for those languages that do support variable
>>>> declarations in for loops; I've always wondered why not any expression?
>>>>
>>>> if( let a = ( let b = 10 ) * 3 > 10 )
>>>> ... or ...
>>>>
>>>> c = (let a = b*d)
>>>>
>>>> granted, the scope is extremely limited in the last case...
>>>>
>>>> _______________________________________________
>>>> es-discuss mailing list
>>>> es-discuss at mozilla.org
>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>
>>>>
>>>
>>> _______________________________________________
>>> es-discuss mailing list
>>> es-discuss at mozilla.org
>>> https://mail.mozilla.org/listinfo/es-discuss
>>>
>>>
>>
>>
>> --
>> Jeremy Martin
>> 661.312.3853
>> http://devsmash.com
>> @jmar777
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20161003/7b037ab9/attachment.html>


More information about the es-discuss mailing list