Какое преимущество дает размещение буквального значения в LHS логического выражения? - PullRequest
2 голосов
/ 17 января 2012

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

Пример:

//Style #1, the style in question
if (null == object.Value || 0 == object.Value) doSomething();

//Style #2, the way I've always written it
if (object.Value == null || object.Value == 0) doSomething();

Есть ли какое-то измеримое преимущество, полученное при написании логических выражений типа # 1? Я не могу понять, почему он будет быстрее вычисляться во время выполнения, но мне интересно, возможно, некоторые компиляторы могут оптимизировать # 1 с большей готовностью, чем # 2? Если да, пожалуйста, объясните, какие компиляторы и почему.

Я всегда считал, что это просто вопрос личного вкуса (возможно, нужно сделать аргумент читабельности), но я видел достаточно кода, написанного как # 1, и мне интересно, есть ли в нем что-то большее, чем я? Я в курсе.

Ответы [ 2 ]

3 голосов
/ 17 января 2012

Некоторые разработчики следуют и защищают (1), так что, если они случайно неверно введут сравнение (==) в качестве присваивания (=), то компилятор выдаст ошибку во время компиляции. В (2) та же неправильная типизация не вызовет ошибки компиляции, но приведет к ошибочной программной логике, потому что if всегда будет преобразовываться в true из-за присваивания.

1 голос
/ 17 января 2012

Это часто происходит из-за неудачного опыта, когда если (A = "lit) попал в базу кода и был либо проигнорирован в предупреждениях, либо компилятор не получил это как предупреждение. Невозможно попасть в эту ловушку, если RHS не является lvalue.

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