Coffeescript中的条件运算符


74

我真的很喜欢这样:

var value = maxValue > minValue ? minValue : maxValue;

Coffescript中是否有同样简洁的内容?


8
非常感谢您不将其称为“三元运算符”。
Mark Wilden '04年

4
@MarkWilden为什么不呢?这是一个既定术语
Stephan

1
如果您寻找咖啡因的三元运算符,则会立即找到它。
william.eyidi 2015年

@MarkWilden:您有5票赞成票,因此似乎有很多人同意您的意见,但请您解释一下原因?
Zaz

3
““三元运算符”的麻烦在于它描述的是外观,而不是功能。 ”-埃里克·利珀特(Eric Lippert),blogs.msdn.com / b / ericlippert / archive / 2010/02/18 /…(在评论)
Joe White

Answers:


140
value = if maxValue > minValue then minValue else maxValue

10
您也可以这样做: value = `maxValue > minValue ? minValue : maxValue`
彼得·克涅耶维奇

1
@PeterKrnjevic:您可能需要您的意见更改为答案:)在相同的字符数,但在我看来不太可读,这也适用:stackoverflow.com/a/23915351/750216
的Răzvan弗拉菲乌斯熊猫

1
如果认为合适的解决方案是:value = Math.min minValue, maxValue
raskhadafi '16

好的,现在您如何在多行上编写代码?除了使用行继续符号``之外还有其他方法吗?
jimasun '16

21

javascript和coffeescript中都有一个简洁的选项:)

value = Math.min(minValue, maxValue)

12
在咖啡中value = Math.min minValue, maxValue;)
v42 2011年

4
我认为问题不是在指实际内容,而是在一行上全部完成的能力。可能是错误的。
LasagnaAndroid 2014年

1
错误,因为它不能解决问题。OPConditional operator in Coffeescript给出了JS示例,并询问了如何写它。这只是一个示例,与实际的语法问题无关。
jimasun


10

在这种情况下,感觉CoffeeScript具有相互竞争的理念:

  1. 简明扼要
  2. 不要多余

由于所有操作都返回结果,因此if / then / else处理方式可以满足您的需求。添加?/:运算符是多余的。

这是我希望他们为我们提供?/:三元运算符的地方,即使它是多余的...它比if / then / else变体的可读性更好。

只是我的2c。


20
有没有办法有a ? b : c没有歧义的CoffeeScript三元,因为a ? b有一个意思(”a如果它不为空,b否则),并b: c有一个,以及({b: c})。
特雷弗·伯纳姆

3

您可以这样写:

value = if maxValue > minValue then minValue else maxValue

它将像您的代码一样进行编译。


3

以下是事实:

在文档中,有一个标题为“条件,三元和条件赋值”的部分。这使人们相信coffeescript支持

condition ? when-true : when-false 

但实际上并非如此。

以下是有关可解决此问题的修补程序的信息

这是补丁(并将其推送到coffeescript.org):

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

例子:

mood = greatlyImproved if singing

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

date = if friday then sue else jill

options or= defaults

2
if then else 三元运算,只是语法不同。
里卡多·托马西

在coffee脚本中,如果else语句写在一行语句中。
西瓦·查兰

1
我的意思是将三元运算定义为具有三个元素的运算。单线if then else声明归为三元。无论如何,JavaScript中“三元”运算符的正确术语是条件运算符
里卡多·托马西

-1
value = maxValue > minValue && minValue || maxValue

这实际上是不正确的,请检查注释。


1
这不能为问题提供答案。要批评或要求作者澄清,请在其帖子下方发表评论。
PlasmaHH 2014年

@PlasmaHH:实际上,这是一个有效的答案,但可读性稍差。
的Răzvan弗拉菲乌斯熊猫

1
@RăzvanPanda不,这不是有效的答案,因为它所做的事情与所请求的略有不同,并且差异未在答案中描述/记录。例如。如果minValue相等0maxValue相等5maxValue > minValue ? minValue : maxValue则将返回0,而maxValue > minValue && minValue || maxValue将会返回5
pepkin88

@ pepkin88:是的,当为minValue传递虚假值并且条件为true时,此答案不起作用。
的Răzvan弗拉菲乌斯熊猫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.