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
[editar | editar código]| 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 |
| C1 | & , |
|
&& , ||
|
Numérico |
| C++, Objective Caml, Haskell | none | && , ||
|
Booleano |
| C#, Java, | & , |
|
&& , ||
|
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, or2
|
and_then , or_else3
|
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.[2]