Coffeescript 中的条件运算符

Posted

技术标签:

【中文标题】Coffeescript 中的条件运算符【英文标题】:Conditional operator in Coffeescript 【发布时间】:2011-12-31 12:16:35 【问题描述】:

我真的很喜欢这个:

var value = maxValue > minValue ? minValue : maxValue;

在 Coffescript 中有同样简洁的东西吗?

【问题讨论】:

非常感谢您没有将其称为“三元运算符”。 @MarkWilden 为什么不呢?这是一个既定术语 如果你在寻找 coffescript 的三元运算符,你马上就能找到。 @MarkWilden:你得到了 5 个赞,所以似乎有不少人同意你的观点,但请你解释一下为什么? “'三元运算符'的问题在于它描述了它看起来像什么,而不是它做了什么。”-- Eric Lippert , blogs.msdn.com/b/ericlippert/archive/2010/02/18/…(在 cmets 中) 【参考方案1】:
value = maxValue > minValue && minValue || maxValue

这实际上是不正确的,检查 cmets。

【讨论】:

这并没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。 @PlasmaHH:这实际上是一个有效的答案,只是可读性差了一点。 @RăzvanPanda 不,这不是一个有效的答案,因为它所做的事情与要求的略有不同,并且答案中没有描述/记录差异。例如。如果minValue 等于0maxValue 等于5,则maxValue > minValue ? minValue : maxValue 将返回0,而maxValue > minValue && minValue || maxValue 将返回5 @pepkin88:这是正确的,当为 minValue 传递一个虚假值并且条件为真时,此答案不起作用。【参考方案2】:

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

value = `maxValue > minValue ? minValue : maxValue`

【讨论】:

你这行代码中引号的作用是什么? 反引号导致行在赋值之前执行。【参考方案3】:

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

value = Math.min(minValue, maxValue)

【讨论】:

喝咖啡,value = Math.min minValue, maxValue ;) 我认为问题不是指实际内容,而是指在一行中完成所有操作的能力。不过可能是错的。 错误,因为它没有解决问题。 OP 询问Conditional operator in Coffeescript 以及如何将其写入,并给出JS 示例。这只是一个示例,与实际的语法问题无关。【参考方案4】:

事实如下:

在文档中,有一节标题为“条件、三元和条件赋值”。这导致人们相信 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

【讨论】:

if then else 三元运算,只是语法不同而已。 咖啡脚本中,if else语句写在一行语句中。 我的意思是三元运算被定义为三个元素的运算。单行if then else 语句归类为三元。 javascript 中“三元”运算符的正确术语是 条件运算符【参考方案5】:

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

    简洁 不要多余

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

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

只是我的 2c。

【讨论】:

CoffeeScript 中不可能有a ? b : c 三元组没有歧义,因为a ? b 有一个含义(“a 如果它是非空的,b 否则)和@987654325 @ 也有一个 (b: c)。【参考方案6】:

你可以这样写:

value = if maxValue > minValue then minValue else maxValue

它会像你的代码一样编译。

【讨论】:

【参考方案7】:
value = if maxValue > minValue then minValue else maxValue

【讨论】:

你也可以这样做:value = `maxValue > minValue ? minValue : maxValue` @PeterKrnjevic:您可能想将您的评论更改为答案 :) 在我看来,相同的字符数但可读性较差,这也有效:***.com/a/23915351/750216 如果认为正确的解决方案是:value = Math.min minValue, maxValue 好的,现在你如何在多行上写这个?除了使用续行符号 ``?

以上是关于Coffeescript 中的条件运算符的主要内容,如果未能解决你的问题,请参考以下文章

三元条件运算符中的多个条件?

"||=" 运算符与 CoffeeScript 中的 "?=" 有何不同?

java中的条件运算符是啥?

C中的三元(条件)运算符

猫鼬中的条件运算符

我可以在 [ngClass] 中使用条件(三元)运算符以及 Angular2 中的多个类条件吗?