como nota de Perl, las palabras que están buscando se no "cortocircuito". evaluación de cortocircuito significa que en la expresión
e1 || e2
si la expresión e1
se evalúa como algo que representa la verdad, entonces no es necesario evaluar e2
. Tanto C como Perl usan evaluación de cortocircuito.
Soy consciente de la distinción que usted hace en dos sabores diferentes de cortocircuito O, pero en veinte años de trabajo en lenguajes de programación nunca he visto nombrar estas cosas. La versión de Perl es bastante popular en los lenguajes dinámicos, por ejemplo, Icon, Lua, Scheme.
La versión Perl es casi expresable en C:
e1 ? e1 : e2
Desafortunadamente esta versión puede evaluar e1
dos veces, dependiendo del optimizador — e1
y si tiene efectos secundarios, o si el compilador no puede decir si es podría tener efectos secundarios, entonces el compilador es requerido para evaluarlo dos veces. Este defecto se puede arreglar vinculando el valor de e1
a una variable local nueva, pero eso requiere una extensión GNU.
El comportamiento C se puede simular en Perl por
!!(e1 || e2)
¿Un término común para dos operaciones que tienen diferentes efectos? ¿No es esto como preguntar si hay un término común para las manzanas y las naranjas? Parece un poco contradictorio. – jalf
@Jalf: Él está pidiendo un término _common para estos dos tipos de ** evaluación ** _, ¿no debería la respuesta ser "Evaluación de corto circuito"? –
No estoy seguro. ¿La evaluación de cortocircuito es el rasgo en el que está interesado? Podría ser "lógica o", o "conversión de int-a-bool". Las dos líneas de código tienen mucho en común, pero también hay algunas diferencias importantes. No estoy seguro de lo que el OP quiere un término común * para * – jalf