Что происходит, если первая часть if-структуры ложна?

, если вы присоединяетесь к двум или более таблицам, и у них есть похожие имена для своих столбцов, сервер sql хочет, чтобы вы квалифицировали столбцы, к которым они принадлежат.

SELECT  ev.[ID]
    ,[Description]
    FROM   [Events] as ev 
    LEFT JOIN  [Units] as un ON ev.UnitID = un.UnitId  

, если таблицы Events и Units имеют одинаковое имя столбца (ID ) SQL-сервер хочет, чтобы вы использовали псевдонимы.

13
задан Qantas 94 Heavy 11 November 2014 в 11:28
поделиться

8 ответов

Важно && . Это короткое замыкание, поэтому счетчик никогда не оценивается; Условия оцениваются слева направо.

Существует также оператор без короткого замыкания ( & ), но его очень редко можно увидеть в тесте if; в основном он предназначен для побитовых операций (на int и т. д.).

Из спецификации:

Условные логические операторы

Операторы && и || называются условными логическими операторами. Их еще называют «Закорачивающие» логические операторы.

...

Операторы && и || являются условными версиями операторов & и | операторы:

  • Операция x && y соответствует операции x & y , за исключением того, что y оценивается, только если x не равно false .
  • Операция x || y соответствует операции x | y , за исключением того, что y оценивается, только если x не истина .
25
ответ дан 1 December 2019 в 18:54
поделиться

В большинстве (но не во всех) современных языках есть функция, называемая «логическое вычисление короткого замыкания» . Это означает, что если первая часть условия && ложна, то вторая часть вообще не оценивается.

Аналогичная функция применяется к || , где, если первая часть имеет значение истина , вторая часть не оценивается.

Обратите внимание, что эта функция не ограничивается операторами if . Следующее также верно и не будет пытаться ссылаться на Count , если myTestList равно null :

bool b = myTestList != null && myTestList.Count > 0;
6
ответ дан 1 December 2019 в 18:54
поделиться

В C # и большинстве языков && и || закорочены , т. Е. Если первый части выражения достаточно для определения результата, вторая часть гарантированно не будет выполнена.

Вы использовали идиоматический код C #.

2
ответ дан 1 December 2019 в 18:54
поделиться

Короткое замыкание.

a && b

, если a ложно, b не будет оцениваться. Мы можем использовать это поведение, потому что выражение всегда будет ложным.

Аналогично,

a || b

, если a истинно, b не будет оцениваться.

2
ответ дан 1 December 2019 в 18:54
поделиться

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

2
ответ дан 1 December 2019 в 18:54
поделиться

Для следующего примера программы:

void test () { bool f1 = 0; bool f2 = 0;

если (f2 && (f1 = 1)) {cout << "Внутри 1" << endl; } cout << "F1" << f1 << ": F2:" << f2 << endl;

if ((f1 = 1) && f2) {cout << "Внутри 2" << endl; } cout << "F1" << f1 << ": F2:" << f2 << endl; }

Результатом будет: F1 0: F2: 0

F1 1: F2: 0

Что в основном показывает, что цикл if выполняется слева направо. 1. В первом цикле if первое условие не выполняется, и вторая часть не проверяется. 2. Во втором цикле if сначала выполняется первая часть, а затем вторая часть.

Это сработает для C ++. Надеюсь это поможет.

  • Ивар
0
ответ дан 1 December 2019 в 18:54
поделиться

Большинство современных языков программирования, включая C #, реализуют так называемый оператор последовательного соединения Маккарти. Это означает:

a && b <=> a ? b : false

Если вы посмотрите на второе из этих двух эквивалентных выражений, становится совершенно ясно, что b вычисляется тогда и только тогда, когда a истинно. И наоборот:

a || b <=> a ? true : b
2
ответ дан 1 December 2019 в 18:54
поделиться

Да, следует использовать оценку короткого замыкания. Я сам не разработчик C #, но я прочитал это из этой статьи в Википедии .

1
ответ дан 1 December 2019 в 18:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: