【问题标题】:Assignment within a ternary operator, an anti-pattern? [closed]三元运算符中的赋值,反模式? [关闭]
【发布时间】:2017-11-26 02:19:49
【问题描述】:

我有一位同事以这种方式使用三元运算符(在 javascript 中):

var genderLabel = '';
isMale? genderLabel  = 'Man' : genderLabel  = 'Woman';

在 C# 中,我会这样做。

var genderLabel = isMale? "Man" : "Woman";

我的同事说这是一个 javascript 编码约定……这是真的吗?我不是 javascript 专家,我不喜欢这种语言...当我查看代码时,我会专注于左侧以跟踪变量初始化或赋值,这种风格迫使我阅读整行。

我还在维护一个前雇员的 Java 代码,他以同样的方式使用三元运算符。那是反模式吗?我认为编译器应该禁止它,就像在 if 语句中禁止它一样:

if(x = 2)
{
   ...
}

这不会在 C# 中编译。

【问题讨论】:

  • 我以前从未见过这种情况。不仅是一个很大的禁忌,因为它会占用更多的重复空间,而且它混乱且语义上很奇怪。

标签: javascript coding-style ternary-operator


【解决方案1】:

我的同事说这是一个 javascript 编码约定...这是真的吗?

没有。

这是一种反模式吗?

通常一行本身就是一个语句,然而这个

isMale ? genderLabel = 'Man' : genderLabel = 'Woman';

是一个表达式,具有设置genderLabel 值的副作用。这是一个好习惯吗?我不知道,但是如果您认为这是一个好习惯,那么您也必须允许这样做:

var a = 1, b = 2;
b = [a][a = b, 0];    # swap a and b

你的同事也可以这样做:

if(isMale) genderLabel = 'Man';
else       genderLabel = 'Woman';

这更清楚。

【讨论】:

    猜你喜欢
    • 2021-04-29
    • 2013-06-28
    • 2021-11-23
    • 2011-07-02
    • 2012-02-14
    • 1970-01-01
    • 2017-07-16
    • 2015-04-06
    • 1970-01-01
    相关资源
    最近更新 更多