5

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

我通常会看到它与赋值表达式一起使用,例如:

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

4 回答 4

3

条件运算符通常应该用在表达式中——产生值的表达式——最好不要用作“if/then/else”语句的替代品。偶尔使用,不会有什么特别的问题;系统地使用,我认为它会向读者隐藏代码的意图。

于 2010-11-06T14:23:55.663 回答
2

这是我个人的偏好:

在这种情况下,我认为它属于“代码是为人们阅读而不是为机器编写的”的思维。因为大多数人不这样写if then else,它可能会导致混乱,增加理解代码的时间,并可能引入错误——如果有人看到并认为,没有分配给任何东西,一定是“遗留”代码让我们删除它,然后代码清理成为错误介绍。


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

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

查理·马丁说的是计算机代码还是人代码?

如果计算机不运行它,它就坏了。如果人们不能阅读它,它就会被破坏。很快。

我认为是的,代码是为机器理解(并正常运行)而编写的,人们理解也很重要。(除非为了赚取咨询费而故意写得难以理解,但他们可能会在以后或下一个项目雇用其他人,或者为了工作安全而故意写得难以理解,如果人们不能很好地理解你的代码,他们可以'不要因为担心其他人无法维护代码而解雇你......也许一件事有两个方面......我看到越来越多这样的案例)

于 2010-11-06T14:15:32.047 回答
0

这个问题很愚蠢,因为您正在谈论允许奇怪事物的 JavaScript。

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

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

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

于 2010-11-06T14:23:25.990 回答
0

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

于 2010-11-06T15:05:40.337 回答