三元运算符中的赋值,一种反模式?

Assignment within a ternary operator, an anti-pattern?

我有一个同事就是这样使用三元运算符的(In javascript):

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

在 C# 中,我会这样做。

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

我的同事说这是 javascript 编码约定...是真的吗?我不是 javascript 专家,我不喜欢那种语言......当我审查代码时,我专注于我的左手边跟随变量初始化或赋值,那种风格迫使我阅读整行.

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

if(x = 2)
{
   ...
}

这不会在 C# 中编译。

My colleague says it's a javascript coding convention... is that true?

没有

Is that an anti-pattern?

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

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';

这样就清楚多了。