Avaliação de curto-circuito
# Avaliação de curto-circuito

Avaliação de curto-circuito, avaliação mínima ou avaliação de McCarthy especifica a semântica de alguns operadores booleanos em algumas linguagens de programação na qual o segundo argumento é apenas executado ou avaliado se o primeiro argumento não for suficiente para determinar o valor da expressão: quando o primeiro argumento de uma função AND é avaliado como falso, o valor global deve ser falso e quando o primeiro argumento da função OR for avaliado como verdadeiro, o valor global deve ser verdadeiro. Em algumas linguagens de programação (Lisp), os operadores booleanos usuais são de curto-circuito. Em outras (Java, Ada), os operadores booleanos padrões e de curto-circuito estão disponíveis.
O operador de curto-circuito x Sand y é equivalente à expressão condicional if x then y else false. x Sor y é equivalente à if x then true else y.

## Suporte em linguagens de programação comuns

Operadores booleanos em várias linguagens :
| Linguagem | Operadores | Operadores de curto-circuito | Tipo do resultado |
| Ada, Eiffel | and , or | and then , or else | Booleano |
| ALGOL 68 | and , & , ∧ ; or , ∨ | andf , orf (ambos definidos pelo usuário) | Booleano |
| C$^1$ | & , | | && , || | Numérico |
| C++, Objective Caml, Haskell | none | && , || | Booleano |
| C#, Java, MATLAB, R | & , | | && , || | Booleano |
| ColdFusion | none | AND , OR , && , || | Booleano |
| Erlang | and, or | andalso , orelse | Booleano |
| Fortran | .and. , .or. | | Booleano |
| JavaScript | none | && , || | Último valor |
| Lisp, Lua, Scheme | none | and , or | Último valor |
| Pascal | and, or$^2$ | and_then , or_else$^3$ | Booleano |
| Perl, Ruby | & , | | && , and , || , or | Último valor |
| PHP | none | && , and , || , or | Booleano |
| Python | none | and , or | Último valor |
| Smalltalk | & , | | and: , or: | Booleano |
| Standard ML | Desconhecido | andalso , orelse | Booleano |
| Visual Basic .NET | And , Or | AndAlso , OrElse | Booleano |
| VB Script, VB Classic, VBA | And , Or | Select Case | Numérico |
$^1$ C, antes C99, de fato não possuía um tipo booleano distinto. $^2$ ISO Pascal permite, mas não requer operações de curto-circuito. $^3$ ISO-10206 Extended Pascal suporta and_then e or_else.