问题标签 [ternary-operator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
2431 浏览

c# - C# 中的三元运算符关联性 - 我可以依赖它吗?

啊,你不只是喜欢一个好的三元虐待吗?:) 考虑以下表达式:

对于那些现在完全困惑的人,我可以告诉你,这评估为true。换句话说,它等价于:

但这可靠吗?我可以确定在某些情况下它不会变成这样:

有人可能会说 -好吧,那就加括号或者干脆不使用它 - 毕竟,众所周知的事实是三元运算符是邪恶的!

当然,它们是,但在某些情况下它们实际上是有意义的。对于好奇的人 - 我正在编写通过一系列属性比较两个对象的代码。如果我像这样冷写它会很好:

简洁明了。但它确实取决于在第一种情况下工作的三元运算符关联性。括号只会把它做成意大利面。

那么 - 这是在任何地方指定的吗?我找不到它。

0 投票
3 回答
6872 浏览

java - 使用三元运算符初始化数组

我试过这样的事情:

但是这段代码甚至不会编译。对此有什么解释吗?不是 funkyBoolean ? {1,2,3} : {4,5,6} 一个有效的表达?提前致谢!

0 投票
8 回答
74096 浏览

java - 使用带有 4 个表达式的三元运算符

这是可接受的编码实践吗?

还是我最好选择经典...

0 投票
6 回答
283 浏览

php - PHP 中是否存在较短的 if 语句?

是否可以以某种方式将其重写为更短?

我在某个地方看到过但忘记了...:/

顺便说一句,如果你愿意,请解释你的代码!

谢谢

0 投票
7 回答
899 浏览

php - PHP 中的这种语法( page = $page ? $page : 'default' )是什么意思?

我是 PHP 新手。我在WordPress中遇到了这种语法。该代码的最后一行是做什么的?

0 投票
3 回答
47468 浏览

php - 什么是?:在 PHP 5.3 中?

可能重复: 什么是 PHP 运算符“?” 和“:”调用,他们做什么?

来自http://twitto.org/

自 PHP 5.3 起,Twitto 使用了几个可用的新功能:

  1. DIR常数_
  2. 运营商
  3. 匿名函数

  1. 在 PHP 5.3中,数字 2 对?:有什么作用?

  2. 另外,匿名函数是什么意思?那不是已经存在了一段时间的东西吗?

0 投票
6 回答
1283 浏览

c# - 我可以在 C# 中创建三元运算符吗?

我想为 a < b < c 创建一个三元运算符,即 a < b && b < c。或者你能想到的任何其他选项 a < b > c 等等......我是我自己的短格式的粉丝,自从我在高中学习编程以来,我一直想创建它。

如何?

0 投票
2 回答
1406 浏览

java - java三元破解

所以我不会在这里追求可维护性或优雅性.. 寻找一种方法来减少总令牌的数量,只是为了好玩。该方法由一个长嵌套的 if-else 构造组成,我发现(我认为)用最少的标记来实现它的方法是三元运算符。本质上,我翻译这个:

对此:

但是,有几种情况,除了返回值之外,我还想更改字段或调用方法;例如,

以令牌方式执行此操作的最便宜的方法是什么?我现在做的很丑但是不会浪费太多的令牌(这里的字段是一个字符串):

同样,重点不是好的编码,我只是在寻找减少令牌数量的技巧。如果有更短的方法来写整个事情,我也愿意接受。感谢您的任何建议。

编辑:每个单词和标点符号都算作一个标记。因此,例如,“instanceOf String”是两个标记,但“!= null”是三个。我可以看到的可能改进的主要内容是“&&”和括号。除了条件之外,有没有办法将“field = value”放在某个地方,如果没有,是否有一个结构可以使“field = value”成为布尔值而不需要括号?

0 投票
2 回答
1945 浏览

java - Java bytecode iconst_0 iadd sequence

Here's a test for fun with the ternary operator:

Here's the bytecode produced:

I was a bit surprised to see that it didn't remove the 'else' case for the '+ 0'. I was more expecting this:

So here comes my question: does the specs mandates the:

sequence because I used the ternary operator, or is this just a compiler thinggy?

Obviously this question is not about the relevancy of writing 'r += ... ? 1 : 0'. But I'm surprised because in other cases the compiler does quite some optimization while here it's not doing any optimization.

Would a Java compiler producing option 2 still be a valid Java compiler (in case I didn't screw my example, but the point is: there's a needless addition of 0 and a needless goto in the code produced, would a compiler removing this still be a valid .java compiler)?

0 投票
2 回答
706 浏览

vb.net - VB.NET "If" 运算符是否会导致装箱?

我们这些在 VB/VB.NET 中工作过的人都见过类似这种可憎的代码:

我说“可憎”有三个简单的原因:

  1. IIf是一个函数,其所有参数都被评估;因此,如果obj上述调用中没有任何内容,NullReferenceException则将抛出 a。对于习惯于在 C# 等语言中使用短路三元运算符的人来说,这是出乎意料的行为。
  2. 因为 IIf是一个函数,所以它会产生函数调用的开销。同样,虽然这没什么大不了的,但对于那些期望它表现为语言固有的三元运算的人来说,它只是感觉不对。
  3. IIf是非泛型的,因此接受 type 的参数Object,这意味着以下调用框(我相信)总共三个整数:

    ' boxes 2nd and 3rd arguments as well as return value '
    Dim value As Integer = IIf(condition, 1, -1)

现在,在一些更新的 VB.NET 版本中(我不确定数字是多少),If引入了运算符,它的工作方式与函数完全相同,IIf但(据我了解)没有相同的缺点。也就是说,它确实提供了短路,它一种内在的 VB 操作。但是,我不确定最后一部分。MSDN 文档似乎没有表明是否将If其参数框起来。有人知道吗?