Применение троичного оператора?: Для выражения, которое может вычислять только значение true / false (x==y
), просто избыточно (просто избыточно [избыточно]).
Приведенное выше предложение может быть проще для чтения тем, кто не очень хорошо понимает английский, так как они будут знать, что искать сначала в словаре и, если произнесут, из-за повторения.Тем не менее, для носителей английского языка это предложение неудобно и, ну, в общем, излишне.
В вашем примере, либо оператор используется в целях документирования, либо, не намереваясь обидеть, я подозреваю, что есть плохое пониманиео том, как работают операторы и выражения.
Будь то отсутствие понимания или какая-то странная попытка документирования, мы можем сделать это без лишних операторов, таких как:
var isMale = (row["Gender"].ToString() == "M"); // bool
или ...
var isMale = (row["Gender"].ToString() == "M"); // true/false
... или, что еще лучше, явно укажите соответствующий тип для isMale вместо того, чтобы полагаться на неявную типизацию:
bool isMale = (row["Gender"].ToString() == "M");
Я также видел, как люди пессимизируют свой кодпуть (или использование if / else):
bool something = some_int ? true: false;
Нет необходимости делать это, и, хотя компилятор может оптимизировать это, по своей природе менее эффективно полагаться на механизмы ветвления для чего-то столь простого:
bool something = some_int != 0;
..., который имеет тот же эффект, но без обходного процесса использования условного ветвления.
Этот видкода просто стыдно.Это все равно что видеть:
switch (x)
{
case 1:
y = 1;
break;
case 2:
y = 2;
break;
case 3:
y = 3;
break;
// etc. for all possible values of x
}
Вышесказанное наверняка будет рассматриваться большинством как код uber-n00b, но логически он не менее избыточен, чем x == y ? true: false
или x ? true: false
(в отличие от x != 0
).