Недостатки использования троичного оператора - PullRequest
4 голосов
/ 11 ноября 2010

В моем исходном коде есть следующие показатели

int tableField1;
int tableField2;

int propertyField1;
int propertyField2;

if (tableField1 != null)
{
  propertyField1 = tableField1;
}

if (tableField2 != null)
{
  propertyField2 = tableField1;
}

// the above pattern is repeated for 10 tablefields ie tableField3, tableField4... tableField10

Я уменьшил вышеупомянутые показатели с помощью троичного оператора следующим образом

propertyField1 = tableField1 != null ? tableField1 : propertyField1;
propertyField2 = tableField2 != null ? tableField2 : propertyField2;

Ниже приведены мои вопросы:

1) Тернарный оператор неэффективен в использовании, чем операторы if.

2) Каковы недостатки (если таковые имеются) использования тернарного оператора.

Ответы [ 3 ]

11 голосов
/ 11 ноября 2010

Почему бы не использовать вместо этого оператор объединения нулей?

propertyField1 = tableField1 ?? propertyField1;

По общему признанию это выглядит немного странным, присваивая исходное значение той же самой переменной. Возможно, это будет немного менее эффективно, чем операторы if, так как в теории вы читаете значение и присваиваете его снова ... но я не удивлюсь, если JIT исключит это. Во всяком случае, это определенно на уровне микрооптимизации.

Некоторые люди считают условный оператор плохим для читабельности - я вообще думаю, что это хорошо для простых утверждений, подобных этому, хотя - это , несколько скрывающее значение «изменяйте значение, только если мы получили новый ".

3 голосов
/ 11 ноября 2010

1) Нет, компилятор будет (должен) обрабатывать троичный оператор точно так же, как явное выражение if, поэтому разницы в эффективности нет.

2) Единственным недостатком являетсячто это может сделать ваш код сложнее для чтения.С другой стороны, это более кратко.Как правило, избегайте троичных операторов для удобства чтения, за исключением очень простых случаев.Это, вероятно, считается очень простым случаем.

Я утверждаю, что этот ответ более независим от языка, чем у Джона Скита:)

0 голосов
/ 11 ноября 2010

Насколько я понимаю, троичное выражение - это в основном просто синтаксический сахар, хотя компилятор может оптимизировать его.

В этом случае я думаю, что это, вероятно, будет более эффективным, хотя я предполагаю, что компилятор оптимизирует его так, чтобы он был примерно таким же, как оператор if.

Недостатки? Ну, это может быть сложнее читать в некоторых случаях. Это зависит от того, что вы собираетесь после.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...