Ternary operation in CoffeeScript

JavascriptCoffeescriptTernary Operator

Javascript Problem Overview


I need to set value to a that depends on a condition.

What is the shortest way to do this with CoffeeScript?

E.g. this is how I'd do it in JavaScript:

a = true  ? 5 : 10  # => a = 5
a = false ? 5 : 10  # => a = 10

Javascript Solutions


Solution 1 - Javascript

Since everything is an expression, and thus results in a value, you can just use if/else.

a = if true then 5 else 10
a = if false then 5 else 10

You can see more about expression examples [here][1]. [1]: http://coffeescript.org/#expressions

Solution 2 - Javascript

a = if true then 5 else 10
a = if false then 5 else 10 

See documentation.

Solution 3 - Javascript

In almost any language this should work instead:

a = true  && 5 || 10
a = false && 5 || 10

Solution 4 - Javascript

Coffeescript doesn't support javascript ternary operator. Here is the reason from the coffeescript author:

> I love ternary operators just as much as the next guy (probably a bit > more, actually), but the syntax isn't what makes them good -- they're > great because they can fit an if/else on a single line as an > expression. > > Their syntax is just another bit of mystifying magic to memorize, with > no analogue to anything else in the language. The result being equal, > I'd much rather have if/elses always look the same (and always be > compiled into an expression). > > So, in CoffeeScript, even multi-line ifs will compile into ternaries > when appropriate, as will if statements without an else clause: > > if sunny
go_outside() else
read_a_book(). > > if sunny then go_outside() else read_a_book() > Both become ternaries, both can be used as expressions. It's consistent, and there's no new syntax to learn. So, thanks for the suggestion, but I'm closing this > ticket as "wontfix".

Please refer to the github issue: https://github.com/jashkenas/coffeescript/issues/11#issuecomment-97802

Solution 5 - Javascript

You may also write it in two statements if it mostly is true use:

a = 5
a = 10 if false

Or use a switch statement if you need more possibilities:

a = switch x
  when true then 5
  when false then 10

With a boolean it may be oversized but i find it very readable.

Solution 6 - Javascript

Multiline version (e.g. if you need to add comment after each line):

a = if b # a depends on b
then 5   # b is true 
else 10  # b is false

Solution 7 - Javascript

CoffeeScript has no ternary operator. That's what the docs say.

You can still use a syntax like

a = true then 5 else 10

It's way much clearer.

Solution 8 - Javascript

Similar to quotesBro's answer , but without the then keyword. Here's a version that uses a normal, multiline if statement. To me, this is formatted nicely.

Consider this normal if statement

if true
    # do stuff
else
    # do stuff

Then use it for assignment (again, without the then keyword)

value = if true
    5
else
    10

value = if false
    5
else
    10

This compiles to javascript as exactly a regular ternary

value = true ? 5 : 10;
value = false ? 5 : 10;

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionevfwcqcgView Question on Stackoverflow
Solution 1 - JavascriptloganfsmythView Answer on Stackoverflow
Solution 2 - JavascriptPaul OliverView Answer on Stackoverflow
Solution 3 - JavascriptAlexander SenkoView Answer on Stackoverflow
Solution 4 - JavascriptMax PengView Answer on Stackoverflow
Solution 5 - JavascriptAlinexView Answer on Stackoverflow
Solution 6 - JavascriptquotesBroView Answer on Stackoverflow
Solution 7 - JavascriptЭд ЛесничийView Answer on Stackoverflow
Solution 8 - JavascriptrevainisdeadView Answer on Stackoverflow