Назначение внутри троичного оператора, анти-паттерн?

У меня есть коллега, который использует троичные операторы таким образом (в 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';

что намного понятнее

Другие вопросы по тегам