Evaluación de cortocircuito


La evaluación de cortocircuito , la evaluación mínima o la evaluación de McCarthy (después de John McCarthy ) es la semántica de algunos operadores booleanos en algunos lenguajes de programación en los que el segundo argumento se ejecuta o evalúa solo si el primer argumento no es suficiente para determinar el valor del expresión: cuando el primer argumento de la ANDfunción se evalúa como false, el valor general debe ser false; y cuando el primer argumento de la ORfunción se evalúa como true, el valor general debe ser true.

En los lenguajes de programación con evaluación perezosa ( Lisp , Perl , Haskell ), los operadores booleanos habituales son de cortocircuito. En otros ( Ada , Java , Delphi ), están disponibles operadores booleanos estándar y de cortocircuito. Para algunas operaciones booleanas, como exclusiva o (XOR), no es posible cortocircuitar, porque siempre se requieren ambos operandos para determinar el resultado.

Los operadores de cortocircuito son, en efecto, estructuras de control en lugar de simples operadores aritméticos, ya que no son estrictos . En términos de lenguaje imperativo (especialmente C y C++ ), donde los efectos secundarios son importantes, los operadores de cortocircuito introducen un punto de secuencia : evalúan completamente el primer argumento, incluidos los efectos secundarios , antes (opcionalmente) de procesar el segundo argumento. ALGOL 68 usó procedimientos para lograr operadores y procedimientos de cortocircuito definidos por el usuario .

Los conectivos condicionales - " cand " y " cor " para abreviar - son... menos inocentes de lo que podría parecer a primera vista. Por ejemplo, cor no se distribuye sobre cand : compare

en el caso ¬A ∧ C , la segunda expresión requiere que B esté definido, la primera no. Debido a que los conectores condicionales complican el razonamiento formal sobre los programas, es mejor evitarlos.

En cualquier lenguaje de programación que implemente la evaluación de cortocircuito, la expresión es equivalente a la expresión condicional y la expresión es equivalente a . En cualquier caso, x solo se evalúa una vez.x and y if x then y else xx or yif x then x else y