Вычисления по короткой схеме
В статье не хватает ссылок на источники (см. также рекомендации по поиску). |
Вычисления по короткой схеме (англ. short-circuit evaluation), также известны как вычисления Маккарти (англ. McCarthy evaluation, в честь американского информатика Джона Маккарти) — это стратегия в некоторых языках программирования, при которой второй логический оператор выполняется или вычисляется только в том случае, если первого логического оператора недостаточно для определения значения выражения. Таким образом, после того, как результат выражения становится очевидным, его вычисление прекращается.
Примеры:
- Если левый операнд
AND
имеет значениеfalse
, то общее значение выражения такжеfalse
. - Если левый операнд
OR
имеет значениеtrue
, то общее значение выражения такжеtrue
.
Более общо, в выражениях вида [math]\displaystyle{ p_1 \wedge p_2 \wedge p_3 \dots }[/math] либо [math]\displaystyle{ p_1 \vee p_2 \vee p_3 \dots }[/math] вычисление продолжается слева направо, пока одно из [math]\displaystyle{ p_n }[/math] не даст false
или true
соответственно. Наличие или отсутствие вычисления по короткой схеме особенно важно, если члены выражения — действия с возможными побочными эффектами (помимо вызова функций это может быть останов программы при делении на ноль или выход за пределы массива). Например, код вида if (n != 0) and (k/n > 17) ...
является корректным только, если язык (или компилятор) гарантирует вычисление по короткой схеме.
В языках программирования с ленивыми вычислениями (Lisp, Perl, Haskell) логические операторы используются по короткой схеме. В других (Ada, Java, Delphi) доступны как операторы по короткой схеме, так и стандартные логические операторы. Для некоторых логических операций, таких как исключающее «или» (XOR), использование короткой схемы невозможно, потому что для определения результата всегда требуются оба операнда.