Coffeescript中的条件运算符

78
我真的很喜欢这个:
var value = maxValue > minValue ? minValue : maxValue;

在Coffeescript中是否有同样简洁的东西?


8
非常感谢你没有称之为“三元运算符”。 - Mark Wilden
4
为什么他不应该?这是一个已经确立的术语。 - Stephan
1
如果你在寻找 Coffeescript 的三元运算符,你会很快找到它。 - william.eyidi
@Zaz,“条件运算符”比“三元运算符”更容易记忆。 - Hai Feng Kao
3
“三元运算符”的问题在于它描述的是它的“外貌”,而不是它的“功能”。 ——Eric Lippert(摘自http://blogs.msdn.com/b/ericlippert/archive/2010/02/18/whats-the-difference-between-ternary-and-tertiary.aspx中的评论) - Joe White
显示剩余2条评论
7个回答

148
value = if maxValue > minValue then minValue else maxValue

10
你也可以这样做:value = `maxValue > minValue ? minValue : maxValue` 意思是,如果最大值大于最小值,则返回最小值,否则返回最大值。 - Peter Krnjevic
1
@PeterKrnjevic:你可能想把你的评论改成答案 :) 在我看来,虽然字符数相同但不太易读,这也可以起作用:https://dev59.com/L2sz5IYBdhLWcg3wADS6#23915351 - Răzvan Flavius Panda
1
如果认为正确的解决方案是:value = Math.min minValue, maxValue - raskhadafi
好的,现在你如何将它写成多行?除了使用行继续符“\”之外还有其他方法吗? - jimasun

20

在JavaScript和CoffeeScript中有一个更加简洁的选项 :)

value = Math.min(minValue, maxValue)

12
在咖啡中,“value = Math.min minValue, maxValue”意思是“value的值为最小值和最大值中的较小值”。 ;) - v42
5
我认为这个问题提出的并不是实际内容,而是在一行中完成所有内容的能力。但我可能错了。 - LasagnaAndroid
2
错误,因为它没有回答问题。OP询问Coffeescript中的条件运算符以及如何编写它,并给出了JS示例。这只是一个示例,与实际的语法问题无关。 - jimasun

12

正如Răzvan Panda所指出的那样,我的评论实际上可能是更好的答案之一:

value = `maxValue > minValue ? minValue : maxValue`

你的代码行中引号的作用是什么? - Mathieu Brouwers
反引号(``)导致该行在赋值之前执行。 - Peter Krnjevic

10

这是一个感觉像CoffeeScript有竞争哲学的案例:

  1. 简洁
  2. 不要冗余

由于所有操作都返回结果,使用if/then/else方式做事情可以给你所需的。添加?/:运算符是冗余的。

这就是我希望他们能给我们?/:三元运算符的地方,即使它是多余的...它读起来比if/then/else变体更好。

仅代表个人观点。


20
在CoffeeScript中,无法使用a ? b : c三元运算符而不产生歧义,因为a ? b有意义(“如果a非空,则为a,否则为b),而b: c也有其含义({b: c})。 - Trevor Burnham

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” 是一个三元操作,只是语法不同。 - Ricardo Tomasi
在 CoffeeScript 中,if else 语句可以写成一行代码。 - Siva Charan
1
我的意思是三元操作被定义为具有三个元素的操作。一个一行代码的if then else语句被归类为三元。在JavaScript中,“三元”运算符的正确术语是条件运算符 - Ricardo Tomasi

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

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


1
这并没有提供问题的答案。如果您想对作者进行批评或请求澄清,请在他们的帖子下留言。 - PlasmaHH
@PlasmaHH:实际上,这是一个有效的答案,只是可读性稍微差一点。 - Răzvan Flavius Panda
1
@RăzvanPanda 不,这不是一个有效的答案,因为它执行的操作与要求的略有不同,并且该差异未在答案中进行描述/记录。例如,如果 minValue 等于 0,而 maxValue 等于 5,那么 maxValue > minValue ? minValue : maxValue 将返回 0,而 maxValue > minValue && minValue || maxValue 将返回 5 - pepkin88
@pepkin88:没错,当传递一个假值给minValue并且条件为真时,这个答案是不可行的。 - Răzvan Flavius Panda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接