Почему короткое замыкание не по умолчанию в VB?

У VB есть операторы AndAlso и OrElse, которые выполняют короткое замыкание.

Почему это не поведение по умолчанию выражений И и Или, поскольку короткое замыкание полезно в каждом случае.

Странно, это напротив для большинства языков, где && и || выполняют короткое замыкание.

Ответ 1

Поскольку команде VB пришлось поддерживать обратную совместимость со старым кодом (и программистами!)

Если короткое замыкание было поведением по умолчанию, операторы побитовые неправильно интерпретировались компилятором.

Почему мы представили AndAlso и OrElse? от Panopticon Central

Наша первая мысль заключалась в том, что логические операции гораздо более распространены, чем побитовые операции, поэтому мы должны сделать AND и Or быть логическими операторами и добавить новые побитовые операторы с именем BitAnd, BitOr, BitXor и BitNot ( последние два для полноты). Однако во время одной из бета-версий стало очевидно, что это была довольно плохая идея. Пользователь VB, который забывает о том, что существуют новые операторы, и использует И когда он означает BitAnd, и когда он означает, что BitOr получит код, который компилирует, но производит "плохие" результаты.

Ответ 2

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

  If x > y And y > z Then

  End If

Как показывает статья Пола Вика (см. ссылку, представленную Кеном Браунином выше), идеальный сценарий, в котором короткое замыкание полезен, - это когда объект сначала проверяется на существование, а затем оценивается одно из его свойств.

  If x IsNot Nothing AndAlso x.Someproperty > 0 Then

  End If

Итак, на мой взгляд, очень сильные и синтаксические параметры.

Ответ 3

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

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