【问题标题】:Ternary (Conditional) Operator and Style三元(条件)运算符和样式
【发布时间】:2011-05-06 00:48:46
【问题描述】:

如果您一开始就讨厌三元条件运算符,则无需回复;)

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

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 所以它不需要赋值。我喜欢节省的空间,但想知道人们对这种类型的使用有何看法,因为我通常只看到三元与分配一起使用。

编辑:我已经看到暗示“隐藏意图”的答案。虽然经典地用在表达式中,但是这如何隐藏意图而不是在表达式中使用呢?尤其是在一种动态语言中,人们可能会看到到处都在使用三元运算符?

【问题讨论】:

  • 重复问题。请始终首先查看以前提出和回答的问题。这是链接,看看是否有帮助:stackoverflow.com/questions/3622244/…
  • 提示:请注意,这种特殊的三元运算符通常称为条件运算符。 “三元”运算符只是具有 3 个操作数的运算符,因此称为“三元”。三元运算符并不多,但在具有多个运算符的语言中,条件运算符只是其中之一。
  • @Mazhar:这个问题是关于以正常的、被接受的方式使用?: 作为表达式级别的选择。这是关于滥用?: 进行积极的副作用,以取代if-else。我个人非常讨厌这种做法。
  • >重复问题。我不相信。我的特别是与将其用作语句而不是表达式有关。链接的问题是更一般的IMO。 bobince 当然也是这么说的。

标签: javascript coding-style ternary-operator


【解决方案1】:

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

【讨论】:

  • 所以没有技术原因不能使用它。
  • 还值得区分 (1) JavaScript 的一个函数式惯用语,其中条件表达式的关键价值在于它们以一种条件语句所没有的方式组合' t,以及 (2) 一种命令式风格,其中并不总是需要表达式,而语句通常就足够了。
【解决方案2】:

这是我个人的喜好:

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


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

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

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

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

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

【讨论】:

  • 哇,如果他们认为它是“剩余”代码而将其删除,那么 IMO 似乎非常激进。引用很有趣,但假设提议的用途实际上使代码的读者感到困惑。然而,它是不是更少的行使它实际上更具可读性?不确定;)
  • hm... 更少的行并不一定会使它更具可读性。例如,一个 35 行的程序可能看起来比 3 行的程序更复杂,但其中一些 code-golf 1-liner 可能很难理解。
【解决方案3】:

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

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

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

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

【讨论】:

  • >silly - 我想这正是我问它的原因。我不习惯在更经典的语言中看到它,但是是的,它在 JS 中是允许的。
【解决方案4】:

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

【讨论】:

  • 我认为与成熟无关。我重申认为它适用于非常简单的条件 IMO
  • 这个非常简单的条件可能需要在某个意想不到的时间进行扩展。
猜你喜欢
  • 2023-03-31
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 2013-04-26
  • 2013-06-06
  • 2023-04-11
  • 2015-05-20
相关资源
最近更新 更多