Ternary operation in CoffeeScript
JavascriptCoffeescriptTernary OperatorJavascript 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;