三元(条件)运算符和样式

时间:2010-11-06 14:10:43

标签: javascript coding-style ternary-operator

如果您首先讨厌三元条件运算符,则无需回复;)

我经常看到这与分配表达式一起使用,如:

var foo = (some_condition) ? then_code : else_code;

但是,我想用它来代替简单的代码,如:

if(some_condition) {
  do_something_simple;
} else {
  do_something_else;
}

而是:

(some_condition) ? do_something_simple : do_something_else;

我可能会在JavaScript中这样做。在上面它返回undefined,因此它不需要赋值。我喜欢节省下来的空间,但想知道人们对这种用途的看法,同样,我通常只看到三元用于作业。

编辑:我看到答案暗指“隐藏意图”。虽然在表达式中经常使用,但是如何在表达式中隐藏意图呢?特别是在一种动态语言中,人们可以看到在各处使用三元运算符?

4 个答案:

答案 0 :(得分:3)

条件运算符通常应该用在表达式 - 值生成表达式中 - 并且最好不要用作'if / then / else'语句的替代。偶尔使用,没有特别的问题;系统地使用,我认为这将隐藏读者的代码意图。

答案 1 :(得分:2)

这是我个人的偏好:

在这种情况下,我认为它的思想是“代码是为人们阅读而不是为机器而编写的”。因为大多数人不会以这种方式编写if then else,所以可能会导致混淆,增加理解代码的时间,并可能引入错误 - 如果有人看到并认为,任何事情都没有任何分配,必须是“遗留”代码,让我们删除它,然后代码清理就成了bug介绍。


引用自:程序应该写给人们阅读,并且只是偶然让机器执行。

- 来自Abelson和Sussman的“计算机程序的结构和解释”

查理·马丁说Is Code For Computers or for People?

如果计算机没有运行它,它就会坏掉。如果人们无法阅读它,它将被打破。很快。

我认为是的,编写的代码是为了让机器理解(并正确运行),对人们来说也很重要。 (除非有意识地难以理解以获得咨询费,但他们可能会在以后或下一个项目中雇用其他人,或故意难以理解为了工作保障,如果人们无法理解您的代码,他们可以'你担心其他人无法维护代码...也许有一个方面有两个方面......我看到越来越多这样的案例)

答案 2 :(得分:0)

问题很愚蠢,因为你在谈论允许奇怪事情的JavaScript。

三元条件运算符在经典编程语言中要求两种情况都是表达式而不是语句。通过这种方式,您可以使用它根据布尔条件在两个表达式之间进行选择,但不能作为普通的if / else分支进行选择。

在像JavaScript这样的语言中,这种差异消失了,因为语句实际上返回了一个值,因此您可以使用三元组并丢弃语句返回的 undefined 值。

从我的观点来看,这更多地依赖于其他编程语言,如果你节省空间,这也会导致混淆,但我认为这是一个偏好问题。只是不要太习惯它,因为只有少数编程语言允许这种三元运算符的使用!

答案 3 :(得分:0)

三元运算符适用于成熟/稳定的程序,但不适用于不断变化的环境。假设您必须向任何分支添加一些额外的代码 - 当您使用if / then / else语法时会更容易。