С точки зрения практики кодирования, что лучше использовать и почему?
Простой ответ: всегда используйте закороченные версии. Там просто нет причин не делать этого. Кроме того, вы делаете свой код более понятным, потому что выражаете свое намерение : логическая оценка. Использование побитовых (логических) операций подразумевает, что вам нужно именно это: битовые операции, а не логическая оценка (хотя MSDN называет их также «логическими операторами», когда они применяются к логическим значениям).
Кроме того, поскольку короткое замыкание оценивает только то, что нужно оценить, оно часто быстрее и позволяет писать такой код как
bool nullorempty = str == null || str.Length == 0;
(Обратите внимание, что для решения этой конкретной проблемы уже существует лучшая функция, а именно string.IsNullOrEmpty
, которую вы также использовали в своем вопросе.) Этот код был бы невозможен с побитовыми логическими операциями, потому что даже если бы str
были null
, второе выражение получило бы оценку, в результате чего NullReferenceException
.
РЕДАКТИРОВАТЬ : Если вы хотите, чтобы побочные эффекты возникали в логическом контексте, пожалуйста, все же не используйте побитовые операции. Это типичный пример того, чтобы быть слишком умным. Следующий сопровождающий код (или даже вы сами, через несколько недель) увидит, что этот код будет думать: «Хм, этот код можно очистить, используя условные операторы», таким образом непреднамеренно нарушая код. Мне жаль того, кто отвечает за исправление этой ошибки.
Вместо этого, если вам приходится полагаться на побочные эффекты, сделайте их явными:
bool hasBuzzed = checkMakeBuzz();
bool isFrobbed = checkMakeFrob();
bool result = hasBuzzed || isFrobbed;
Конечно, три строки вместо одной. Но в результате получился намного более понятный код.