Blub
Blub

Reputation: 13634

Conditional operator in Coffeescript

I really like this:

var value = maxValue > minValue ? minValue : maxValue;

Is there something equally concise in Coffescript?

Upvotes: 78

Views: 51906

Answers (7)

Sergey Semenov
Sergey Semenov

Reputation: 369

value = maxValue > minValue && minValue || maxValue

This is actually not correct, check the comments.

Upvotes: -1

Peter Krnjevic
Peter Krnjevic

Reputation: 1120

As Răzvan Panda points out, my comment may actually one of the better answers:

value = `maxValue > minValue ? minValue : maxValue`

Upvotes: 12

Ricardo Tomasi
Ricardo Tomasi

Reputation: 35253

There is a more concise option in both javascript and coffeescript :)

value = Math.min(minValue, maxValue)

Upvotes: 20

Siva Charan
Siva Charan

Reputation: 18064

Below is the fact:

In the documentation, there's a section titled "Conditionals, Ternaries, and Conditional Assignment". This leads one to believe that coffeescript supports

condition ? when-true : when-false 

but in fact it does not.

Below is the information about the patch which will solve this issue

Here's the patch (and it's pushed to coffeescript.org):

http://github.com/jashkenas/coffee-script/commit/ec2d358ae3c82e9888c60695d7cce05edde0c55a

Examples:

mood = greatlyImproved if singing

if happy and knowsIt
  clapsHands()
  chaChaCha()
else
  showIt()

date = if friday then sue else jill

options or= defaults

Upvotes: 3

Brian Genisio
Brian Genisio

Reputation: 48147

This is a case where it feels like CoffeeScript has competing philosophies:

  1. Be concise
  2. Don't be redundant

Since all operations return a result, the if/then/else way of doing things gives you what you need. Adding the ?/: operator is redundant.

This is where I wish they'd give us the ?/: ternary operator even though it is redundant... it simply reads better than the if/then/else variant.

Just my 2c.

Upvotes: 10

v42
v42

Reputation: 1425

You can write it like this:

value = if maxValue > minValue then minValue else maxValue

It will compile like your code.

Upvotes: 3

user142162
user142162

Reputation:

value = if maxValue > minValue then minValue else maxValue

Upvotes: 147

Related Questions