Назначение внутри троичного оператора, анти-паттерн?
У меня есть коллега, который использует троичные операторы таким образом (в JavaScript):
var genderLabel = '';
isMale? genderLabel = 'Man' : genderLabel = 'Woman';
В C# я бы просто сделал это.
var genderLabel = isMale? "Man" : "Woman";
Мой коллега говорит, что это соглашение о кодировании javascript... это правда? Я не эксперт по javascript, и мне не нравится этот язык... Когда я просматриваю код, я сосредотачиваюсь на левой стороне, чтобы следовать инициализации или присваиванию переменной, такой стиль заставляет меня читать всю строку.
Я также поддерживаю Java-код бывшего сотрудника, он также использует троичные операторы. Это анти-паттерн? Я думаю, что это должно быть запрещено компилятором так же, как это запрещено в операторе if:
if(x = 2)
{
...
}
Это не скомпилируется в C#.
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';
что намного понятнее