请考虑以下示例代码:
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中使用单行三元运算符?
有人可以说明原因吗?
预先感谢您的大力帮助。
答案 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)
拥有的原因?和:在单独的行上是这样,以便您更容易弄清楚如果源控件具有逐行比较功能,则更改的内容。
如果您刚刚更改了之间的内容?和:并且所有内容都在一行上,因此整个行都可以标记为已更改(根据您的比较工具)。