Урок 5. Короткозамкнутые вычисления

Короткозамкнутое вычисление – техника, работающая по следующему принципу: Если значение первого операнда в операции 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. ЛОГИЧЕСКИЕ ОПЕРАЦИИ".

%D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B0%20%D0%B2%D0%BB%D0%B5%D0%B2%D0%BE%202 предыдущая статья | следующая статья %D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B0%20%D0%B2%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%202