, если вы присоединяетесь к двум или более таблицам, и у них есть похожие имена для своих столбцов, сервер sql хочет, чтобы вы квалифицировали столбцы, к которым они принадлежат.
SELECT ev.[ID]
,[Description]
FROM [Events] as ev
LEFT JOIN [Units] as un ON ev.UnitID = un.UnitId
, если таблицы Events и Units имеют одинаковое имя столбца (ID ) SQL-сервер хочет, чтобы вы использовали псевдонимы.
Важно &&
. Это короткое замыкание, поэтому счетчик
никогда не оценивается; Условия оцениваются слева направо.
Существует также оператор без короткого замыкания ( &
), но его очень редко можно увидеть в тесте if; в основном он предназначен для побитовых операций (на int
и т. д.).
Из спецификации:
Условные логические операторы
Операторы
&&
и||
называются условными логическими операторами. Их еще называют «Закорачивающие» логические операторы....
Операторы
&&
и||
являются условными версиями операторов&
и|
операторы:
- Операция
x && y
соответствует операцииx & y
, за исключением того, чтоy
оценивается, только еслиx
не равноfalse
.- Операция
x || y
соответствует операцииx | y
, за исключением того, чтоy
оценивается, только еслиx
неистина
.
В большинстве (но не во всех) современных языках есть функция, называемая «логическое вычисление короткого замыкания» . Это означает, что если первая часть условия &&
ложна, то вторая часть вообще не оценивается.
Аналогичная функция применяется к ||
, где, если первая часть имеет значение истина , вторая часть не оценивается.
Обратите внимание, что эта функция не ограничивается операторами if
. Следующее также верно и не будет пытаться ссылаться на Count
, если myTestList
равно null
:
bool b = myTestList != null && myTestList.Count > 0;
В C # и большинстве языков &&
и ||
закорочены , т. Е. Если первый части выражения достаточно для определения результата, вторая часть гарантированно не будет выполнена.
Вы использовали идиоматический код C #.
Короткое замыкание.
a && b
, если a
ложно, b
не будет оцениваться. Мы можем использовать это поведение, потому что выражение всегда будет ложным.
Аналогично,
a || b
, если a
истинно, b
не будет оцениваться.
Оценка немедленно остановится, если ссылка пуста
. Это называется вычислением короткого замыкания логических выражений - если левая часть &&
имеет значение false
, правая часть вообще не оценивается.
Для следующего примера программы:
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 ++. Надеюсь это поможет.
Большинство современных языков программирования, включая C #, реализуют так называемый оператор последовательного соединения Маккарти. Это означает:
a && b <=> a ? b : false
Если вы посмотрите на второе из этих двух эквивалентных выражений, становится совершенно ясно, что b
вычисляется тогда и только тогда, когда a
истинно. И наоборот:
a || b <=> a ? true : b
Да, следует использовать оценку короткого замыкания. Я сам не разработчик C #, но я прочитал это из этой статьи в Википедии .