Короткозамкнутое вычисление – техника, работающая по следующему принципу: Если значение первого операнда в операции AND (&&
) ложно, то второй операнд не вычисляется, потому что полное выражение в любом случае будет ложным. Или если значение первого операнда в операции OR (||
) истинно, то второй операнд не вычисляется, потому что полное выражение в любом случае будет истинным.
Из этого следует следующее:
- Условный оператор AND (
&&
) выполняет логическое AND своих операндов типаbool
, но вычисляет только второй операнд при необходимости. - Условный оператор OR (
||
) выполняет логическое OR своих операндов типаbool
, но вычисляет только второй операнд при необходимости.
Поэтому при запуске кода ниже, программа успешно завершится (хотя во втором операнде операции AND (&&
) происходит деление на 0
):
static void Main()
{
int MIN_VALUE = 1;
int denominator = 0;
int item = 2;
// Условие, которое работает с использованием техники КОРОТКОЗАМКНУТОГО ВЫЧИСЛЕНИЯ.
// Если бы это выражение вычислялось полностью, то операция деления во втором операнде,
// генерировала бы ошибку деления на 0.
if ((denominator != 0) && (item / denominator) > MIN_VALUE)
{
Console.WriteLine("Мы в блоке IF");
}
else
{
Console.WriteLine("Мы в блоке ELSE");
}
// Delay.
Console.ReadKey();
}
Нужно заметить, что если бы вместо AND (&&
) использовалось побитовое И (&
), то ошибка была бы выявлена. Кроме того, ошибка также будет выявлена в случаи изменения мест операндов в самой операции AND (&&
).
Для операции OR (||
) короткозамкнутые вычисления работаю похожим образом, различие состоит в том, что если первый операнд операции истинный (true
), то второй операнд вычисляется не будет.
Источник: видеоурок Александра Шевчука "ВИДЕОУРОК №5. ЛОГИЧЕСКИЕ ОПЕРАЦИИ".