Должен ли я всегда использовать операторы AndAlso и OrElse?

Есть ли обстоятельства, при которых я бы не хотел использовать AndAlso оператор, а не And оператор?... или в котором я не хотел бы использовать OrElse оператор, а не Or оператор?

3 ответа

Решение

Из MSDN:

Короткозамкнутые компромиссы

Короткое замыкание может улучшить производительность, не оценив выражение, которое не может изменить результат логической операции. Однако, если это выражение выполняет дополнительные действия, короткое замыкание пропускает эти действия. Например, если выражение включает вызов процедуры Function, эта процедура не вызывается, если выражение замкнуто и любой дополнительный код, содержащийся в функции, не выполняется. Если логика вашей программы зависит от какого-либо дополнительного кода, вам, вероятно, следует избегать коротких замыканий операторов.

Существуют ли обстоятельства, при которых я не хотел бы использовать оператор AndAlso вместо оператора And?

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

Но в целом пользуйся AndAlso/OrElse всякий раз, когда вы будете использовать &&/|| в C/C++/C#, что, конечно, в подавляющем большинстве случаев.

Это совершенно разные функции в VB.net, и у обоих есть свои варианты использования (хотя для наиболее распространенного использования оба будут работать)

AndAlso а также OrElseявляются условными операторами, они возвращают логическое значение true или false и оценивают только то, что им нужно, пока не достигнут результат, который нельзя изменить (false для AndAlso, true для OrElse). Это эквивалент && а также || на таких языках, как C # и Java.

And а также Orявляются побитовыми операторами, они объединяют биты переданного им в результат, и, поскольку эти биты всегда можно изменить при дальнейшей оценке, необходимо оценить все. Это эквивалент & а также | на таких языках, как C # и Java.

В большинстве случаев, когда вы смотрите на операцию и / или операцию, вам нужны условные результаты. Побитовые операции производят значение, которое является правдивым или ложным и будет (обычно) соответствовать истинным или ложным результатам правильных условных операторов, они просто займут в среднем немного больше времени, поскольку они оценивают все.

Побитовые операторы предназначены для использования, когда вы заботитесь о конкретных битах в значении, часто используемых для хранения настроек или разрешений в максимально компактном виде, а также для их чтения и применения как можно быстрее. Например, разрешения на чтение / запись / выполнение файлов в системах на основе Unix используют битовые флаги следующим образом:

0b001 - разрешение на выполнение
0b010 - разрешение на запись
0b100 - разрешение на чтение

Итак, в десятичном формате значение 7 может выполнять все три, значение 4 может только читать, 6 может читать и писать и т. д. Если кто-то пытается записать в файл, он проверяет его разрешения, используя And 0b010и получает правдивый или ложный результат на основе бита в этой позиции. Чтобы обновить значение, чтобы пользователи могли выполнять файл, вы должны использовать Or 0b001 на их текущих разрешениях и сохраните результат.

Разница здесь:

0b001 (правда) И 0b010 (правда) = 0b000 (ложь)
0b001 (правда) И также 0b010 (правда) = Истина

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