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-fonte]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 , 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
.[2]