Proposal: result-forwarding ternary operator

Michał Wadas michalwadas at gmail.com
Thu Sep 21 11:22:09 UTC 2017


Actual characters are minor issue. There are many unused combinations of
"special" characters. Eg.
?> ?: :? ?() @? ?* ?# ?@ @? -? =? ?= (?) etc.



On Thu, Sep 21, 2017 at 11:19 AM, Michael Rosefield <rosyatrandom at gmail.com>
wrote:

> There was a suggestion that came up in my original reddit post that I
> think merits discussion here.
>
> I know one of the main arguments against this new operator is to prevent
> needless and confusing language explosion, but u/notNullOrVoid pointed out
> that this bears similarity to another operator already under TC39
> consideration, the pipeline-operator (https://github.com/tc39/
> proposal-pipeline-operator).
>
> My suggestion could then be implemented as follows:
>
> const foo = getSomething() |> x => x ? dosomething(x) : doSomethingElse();
>
> And this ternary could be simply a pipeline variant:
>
> const foo = getSomething() ?> x => dosomething(x) : doSomethingElse();
>
> That reads much clearer and also takes care of the syntactically invalid
> ?! formularion.
>
> On Wed, 20 Sep 2017 at 14:22 Naveen Chawla <naveen.chwl at gmail.com> wrote:
>
>> As your example shows, for loops can be reduced to array reduction
>> function calls. `if` `else`s can be represented by ternaries.
>>
>> `while` loops aren't so straightforward but can be factored into single
>> function calls. They are less common anyway.
>>
>> I find single expressions listed as `(a, b, c)` more readable than code
>> blocks who eventually evaluate to a single value each.
>>
>> So, even if `do` expressions were introduced into ES, I would avoid using
>> them as much as I could, unless it were really smarter and more readable to
>> use them than any of the alternatives
>>
>> On Wed, 20 Sep 2017 at 16:11 T.J. Crowder <tj.crowder at farsightsoftware.
>> com> wrote:
>>
>>> On Wed, Sep 20, 2017 at 11:28 AM, Naveen Chawla <naveen.chwl at gmail.com>
>>> wrote:
>>> >
>>> > The comma operator seems to make the `do` concept redundant, at
>>> > least for me.
>>>
>>> No, not at all. Again: With the comma operator, you can't use
>>> *statements*, only expressions. With the `do` expression, you can use
>>> actual statements:
>>>
>>> ```js
>>> const x = do {
>>>     for (const x of getTheThings()) {
>>>         if (x.id == something) {
>>>             x.foo;
>>>         }
>>>     }
>>> };
>>> ```
>>>
>>> ...which is basically:
>>>
>>> ```js
>>> const x = getTheThings().find(x => x.id == something).foo;
>>> ```
>>>
>>> ...except it doesn't throw if `find` returns `undefined`, and isn't a
>>> series of function calls.
>>>
>>> `do` expressions are basically to address overly-complex conditional
>>> expressions and IIFEs.
>>> More: https://gist.github.com/dherman/1c97dfb25179fa34a41b5fff040f9879
>>>
>>> -- T.J. Crowder
>>>
>>> _______________________________________________
>> 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/20170921/a9d1fe93/attachment.html>


More information about the es-discuss mailing list