三元运算符中的赋值,一种反模式?
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';
这样就清楚多了。
我有一个同事就是这样使用三元运算符的(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';
这样就清楚多了。