Почему короткое замыкание не является поведением по умолчанию в VB? - PullRequest
15 голосов
/ 28 января 2009

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

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

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

Ответы [ 3 ]

18 голосов
/ 28 января 2009

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

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

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

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

1 голос
/ 28 января 2009

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

  If x > y And y > z Then

  End If

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

  If x IsNot Nothing AndAlso x.Someproperty > 0 Then

  End If

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

0 голосов
/ 28 января 2009

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

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

...