三元运算符用于增加变量

时间:2016-06-13 23:04:11

标签: javascript java ternary-operator

使用三元运算符是一个好习惯:



answersCounter = answer.length != 0 ? ++answersCounter : answersCounter;




这是一个我经常问自己的问题,因为它经常发生。或者使用普通的if语句更好。对我来说,这一行看起来更清晰。

2 个答案:

答案 0 :(得分:4)

这只是意见,但我认为像你一样写出增量是一种不好的风格。

将变量分配给自身的预增量版本有点令人困惑。对我来说,最好的代码是最清晰的(除非在必要时对优化进行点头),有时简洁会导致清晰度,有时它不会(看到任何用Perl写的东西......我小子,有点)。

你有过编程技巧问题:

int i = 5;
i += i++ + i;

或类似的东西?而且你想你自己谁需要知道它是如何工作的,因为你什么时候将变量分配给它自己的前/后增量版本?我的意思是,你永远不会在实际代码中看到它,对吧?

嗯,你刚刚提供了一个例子。虽然它是可解析的,但它不是惯用的,也不是直接的if更清晰。

E.g。

if (answer.length != 0) answersCounter++;

当然,有些人不喜欢if语句中的括号,并且不喜欢没有换行符的大括号,这可能就是你最终得到三元组的方式。编码样式的东西需要重新评估,但是如果它导致(主观上)更糟糕的代码以避免一些回车。

同样,这只是意见,当然不是规则。

答案 1 :(得分:0)

对于Java脚本
目前尚不清楚OP是否在询问Java,JavaScript或真正的两者。 也知道这是一个老问题,但是我一直在玩这个游戏,并最终在这里找到,所以认为值得分享。

以下内容无济于事,因为三元运算符中的增量器无法按预期工作。

let i = 0;
const test = true;
i = test ? i++ : i--; 
console.log(i) // 0

++切换为+1,并将--切换为-1确实可行。
但是,从概念上讲,这有点奇怪。我们正在创建变量的增量,然后将该增量变量分配回原始变量。而不是直接增加变量。

let i = 0;
const test = true;
i = test ? i+1 : i-1; 
console.log(i) // 1

您还可以使用逻辑运算符&&||
但是,我个人觉得这很难阅读,并且可以确定不进行测试就可以输出什么。

let i = 0;
const test = true;
i = test && i+1 || i-1; 
console.log(i) // 1

但是,如上所述,在一天结束时,if else语句似乎是最清晰的表示形式。
这样就直接增加了变量,如果简洁是目标,那么它仍然可以全部一行。

let i = 0;
const test = true;
if (test) { i++ } else { i-- }
console.log(i) // 1