Ternary operator enhancement proposal

# devlato (a month ago)

Hey folks,

not sure if you haven't discussed something similar, but what do you think about making an enhancement for the ternary operator, to make it more powerful? I've created a small explanatory doc on GitHub: devlato/proposal-ternary-placeholder

Warmest , Denis

# Jacob Pratt (a month ago)

Aside from the fact that using a non-reserved identifier would break back-compatibility, I'm fairly certain pattern matching would allow for not recalculating the value while also being far more readable.

# Michael Luder-Rosefield (a month ago)

I put forward a similar proposal a while back: esdiscuss.org/topic/proposal-result-forwarding-ternary-operator

Dammit babies, you've got to be kind.

# Claude Pache (a month ago)

Le 13 nov. 2019 à 03:43, devlato <ecma6 at devlato.com> a écrit :

Hey folks,

not sure if you haven't discussed something similar, but what do you think about making an enhancement for the ternary operator, to make it more powerful? I've created a small explanatory doc on GitHub: devlato/proposal-ternary-placeholder

Warmest , Denis

The generic problem is: you do some computation, and you want to reuse the result of that computation later.

The generic solution is to use a temporary variable:

// declare a temporary variable at the top of some scope
var _;

// later, use it:
const X = () => (_ = x?.y?.z) ? doSomethingWithValue(_) : null;

Now, you are not satisfied with the existing solution, and you want to avoid declaration of temporary variables in some outer scope...? Maybe:

const X = () => (#1 = x?.y?.z) ? doSomethingWithValue(#1) : null;

(Any similarity with developer.mozilla.org/en-US/docs/Archive/Web/Sharp_variables_in_JavaScript, developer.mozilla.org/en-US/docs/Archive/Web/Sharp_variables_in_JavaScript is not at all fortuitous.) However, I’m not convinced that the need to declare your temporary variables is such a problem that it is worth the introduction of new syntax.

# Cyril Auburtin (a month ago)

the do operator might be good enough

const z = do { const z = x?.y?.z; z ? doSomethingWithValue(z) : null; };
# Isiah Meadows (a month ago)

Also, this particular use case could be addressed by adding an equivalent of the stage 3 optional chaining operators to the proposed pipeline operator: tc39/proposal-pipeline-operator.

In this light, I've also filed an issue there: tc39/proposal-pipeline-operator#159


Isiah Meadows contact at isiahmeadows.com, www.isiahmeadows.com