【问题标题】:Ternary Operator use to increase variable三元运算符用于增加变量
【发布时间】:2016-10-14 12:08:22
【问题描述】:

为此使用三元运算符是否是一种好习惯:

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

这是我经常问自己的一个问题。或者,使用普通的 if 语句更好吗?对我来说,这看起来更简洁。

【问题讨论】:

  • answersCounter += answer.length != 0; 就是你所需要的
  • 看起来不错!但它是如何工作的?,因为评估的结果是一个布尔值,变量是一个数字。这不能在 Java 中工作吗?
  • 并非如此。您真的应该只使用简单明了的if 语句,而不是试图变得花哨。
  • 右侧计算为布尔结果(truefalse)。 += 运算符将强制它输入数字(10)。在您的控制台中尝试一下!
  • 没有@Frak,它不会在 Java 中工作,但是 很多 的东西不会在一种语言或另一种语言中工作; Java 和 JavaScript 的共同点与“ham”和“Hamlet”一样多。

标签: javascript conditional-operator


【解决方案1】:

这只是意见,但我认为像你这样写增量有点糟糕。

将变量分配给自身的预递增版本有点令人困惑。对我来说,最好的代码是最清晰的(除了在必要时对优化的点头),有时简洁会带来清晰,有时则不然(看看用 Perl 写的任何东西......我的孩子,排序)。

你有没有遇到过以下编程技巧问题:

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

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

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

例如

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

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

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

【讨论】:

  • 这是一个非常好的棘手问题,谢谢!!!而且我认为使用 if 语句更具体是这里的方法:)
【解决方案2】:

对于 Javascript
目前尚不清楚 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    相关资源
    最近更新 更多