不应在Node.js中的单行上使用三元运算符。为什么?

时间:2013-02-12 12:43:02

标签: node.js coding-style standards

请考虑以下示例代码:

1.Sample

var IsAdminUser = (User.Privileges == AdminPrivileges)
  ? 'yes'
  : 'no';
console.log(IsAdminUser);

2.Sample

var IsAdminUser = (User.Privileges == AdminPrivileges)?'yes': 'no';
console.log(IsAdminUser);

我很满意的第二个样品&我以这种方式编码,但有人告诉它wrong way没有任何支持的原因。

为什么建议不要在Node.js中使用单行三元运算符?

有人可以说明原因吗?

预先感谢您的大力帮助。

5 个答案:

答案 0 :(得分:6)

?放在新行上实际上是错误的;即使它在实践中没有受到伤害。

原因是名为“Automatic Semicolon Insertion”的JS功能。当var语句以换行符结尾(没有尾随逗号,这表示将遵循更多声明)时,您的JS解释器应该自动插入分号。

这个分号会产生IsAdminUser被赋予布尔值(即User.Privileges == AdminPrivileges的结果)的效果。之后,一个新的(无效的)表达式将从您认为是三元运算符的问号开始。

如上所述,大多数JS口译人员足够聪明,可以认识到你有一个你不应该有一个换行符,并且暗示修复你的三元运算符。而且,在缩小脚本时,无论如何都会删除换行符。

所以,在实践中没问题,但你依赖于常见JS引擎的隐式修复。最好像这样编写三元运算符:

var foo = bar ? "yes" : "no";

或者,对于较大的表达式:

var foo = bar ?
    "The operation was successful" : "The operation has failed.";

甚至:

var foo = bar ?
    "Congratulations, the operation was a total success!" :
    "Oh, no! The operation has horribly failed!";

答案 1 :(得分:5)

对于所有编码标准,它们通常具有可读性和可维护性。我的猜测是作者发现它在单独的行上更具可读性。您的语言的编译器/解释器将处理它。只要你/你的项目有一套标准并坚持下去,你就没事了。我建议在将这些标准投入石头之前,对标准进行处理或至少由项目中的每个人进行审查。我认为如果你在这样的单独行上分解它,你也可以定义一个if / else条件块并使用它。

警惕没有正当理由的编码标准规则。

就个人而言,我不喜欢三元运算符,因为它对我来说感觉不自然,我总是要读几行才能理解它在做什么。我发现单独的if / else块更容易让我阅读。个人偏好当然。

答案 2 :(得分:2)

因为它更容易在眼睛上阅读。更容易看到你的第一个片段一目了然 - 我甚至不必读到一行的结尾。我可以简单地查看一个位置,并立即知道IsAdminUser对于什么条件会有什么值。与你为什么不在一行上写一个完整的if / else块的原因大致相同。

请记住,这些是样式约定,并不一定以客观(或技术)推理作为备份。

答案 3 :(得分:1)

我完全不同意提出此建议的人。三元运算符是所有“C”风格语言(C,C ++,Java,C#,Javascript等)的标准功能,大多数使用这些语言编写的开发人员对单行版本完全熟悉。

第一个版本对我来说很奇怪。如果我维护代码并看到了这一点,我会将其更正为一行。

如果你想要详细,请使用if-else。如果你想要整洁和紧凑使用三元组。

我的猜测是,提出此建议的人对操作员并不是很熟悉,所以发现它很混乱。

答案 4 :(得分:1)

拥有的原因?和:在单独的行上是这样,以便您更容易弄清楚如果源控件具有逐行比较功能,则更改的内容。

如果您刚刚更改了之间的内容?和:并且所有内容都在一行上,因此整个行都可以标记为已更改(根据您的比较工具)。