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
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.
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
if else then
</rant> – AJPa = true ? 5 : 10
is valid coffeescript, but does not mean a ternary structure, instead (in javascript) it means:a = true ? true : {5:10}
which is known as a bad thing® Additionallya = false ? {5 : 10}
in coffeescript then (in javascript) is equivalent to:a = true ? false : {5:10}
For what it's worth, I don't think it's good. – AJPbeast = yeti ? "bear"
orif yeti? then alert "It's a yeti!"
makes use the?
quite well. – Paul Oliverif/then/else
is already an expression and does the same thing. If you're really missing it, then you're rather used to C or JavaScript syntax than really in need of it. If it's not readable enough, and it sometimes does happen, simply wrap whole expression in parentheses. Operator?
has been spared for more useful checks which are absent in JavaScript, as already stated by @PaulOliver. Existential operator is the best. – skalee