Вычисления по короткой схеме

Вычисления по короткой схеме (англ. short-circuit evaluation), также известны как вычисления Маккарти (англ. McCarthy evaluation, в честь американского информатика Джона Маккарти) — это стратегия вычисления в некоторых языках программирования, при которой второй логический оператор выполняется или вычисляется только в том случае, если первого логического оператора недостаточно для определения значения выражения. Таким образом, после того, как результат выражения становится очевидным, его вычисление прекращается[1].

Примеры:

  • Если левый операнд AND имеет значение false, то общее значение выражения также false, независимо от значения правого операнда.
  • Если левый операнд OR имеет значение true, то общее значение выражения также true, независимо от значения правого операнда.

В общих словах, в выражениях вида либо вычисление продолжается слева направо, пока одно из не даст false или true соответственно. Наличие или отсутствие вычисления по короткой схеме особенно важно, если члены выражения — действия с возможными побочными эффектами (помимо вызова функций это может быть останов программы при делении на ноль или выходе за пределы массива). Например, код вида if (n != 0) and (k/n > 17) ... является корректным только, если язык (или компилятор) гарантирует вычисление по короткой схеме[2].

В языках программирования с ленивыми вычислениями (Lisp, Perl, Haskell) логические операторы используются по короткой схеме. В других (Ada, Java, Delphi) доступны как операторы по короткой схеме, так и стандартные логические операторы[3]. Для некоторых логических операций, таких как исключающее «или» (XOR), вычисления по короткой схеме невозможны, потому что для определения результата всегда требуются оба операнда.

Примечания

править
  1. Булевские (логические) операции. Курганский государственный университет. Дата обращения: 30 марта 2023. Архивировано 19 июня 2019 года.
  2. EXP02-C. Be aware of the short-circuit behavior of the logical AND and OR operators (англ.). Carnegie Mellon University. Архивировано 25 мая 2022 года.
  3. Short Circuit Evaluation in Programming (англ.). CodersLegacy. Дата обращения: 30 марта 2023. Архивировано 3 октября 2022 года.

Ссылки

править