Evaluación de cortocircuito: el cortocircuito es un concepto de programación en el que el compilador omite la ejecución o evaluación de algunas subexpresiones en una expresión lógica. El compilador deja de evaluar las demás subexpresiones tan pronto como se determina el valor de la expresión. A continuación se muestra un ejemplo de la misma:
C++
if (a == b || c == d || e == f) { // do_something }
Explicación: en la expresión anterior, si la expresión a == b es verdadera , entonces c == d y e == f no se evalúan porque el resultado de la expresión ya se ha determinado. De manera similar, si se usa el operador lógico AND (&&) en lugar del operador lógico OR (||) y la expresión a == b es falsa , el compilador omitirá la evaluación de otras subexpresiones.
Ejemplo 1:
C++
// C program to illustrate the concept // of short circuiting #include <stdio.h> // Driver Code int main() { int x = 1; if (x || ++x) { printf("%d", x); } return 0; }
1
Explicación: En el programa C anterior , dentro de la instrucción if, el valor de la primera subexpresión, es decir, x es 1 (lo que significa verdadero en booleano), por lo que el valor de la segunda subexpresión no afecta el valor de la expresión y, por lo tanto, el compilador omite verificarla. Entonces el valor de x no se incrementa.
Ejemplo 2:
C
// C program to illustrate the concept // of short circuiting #include <stdio.h> // Driver Code int main() { int x = 1; int y = -1; // Since x == 50 evaluates to false, the second sub-expression is // also evaluated, value of y is incremented to 0 (false in boolean). // As a result else block is executed and the incremented value of y is // printed from within the else block if (x == 50 || ++y) { printf("if block executed\n"); printf("Value of y: %d", y); } else { printf("else block executed\n"); printf("Value of y: %d", y); } return 0; }
else block executed Value of y: 0
Explicación: dado que x == 50 se evalúa como falso, la segunda subexpresión también se evalúa y el valor de y se incrementa a 0 (falso en booleano). Como resultado, se ejecuta el bloque else y el valor incrementado de y se imprime desde dentro del bloque else.
Aplicaciones: el concepto de cortocircuito puede ser útil en muchos escenarios. Algunos de ellos se enumeran a continuación:
- Evitar comportamientos inesperados: Se puede utilizar para evitar comportamientos inesperados debido al segundo argumento. Por ejemplo: Considere el siguiente fragmento de código:
C
// C program to illustrate the concept // of short circuiting #include <stdio.h> // Driver Code int main() { float nr = 5, dr = 0; dr && printf("a/b = %.2f", nr / dr); }
Producción
// No output
Explicación: aquí, dado que el valor de dr es 0 (falso en booleano), la expresión nr/dr dentro de printf no se evaluará y se evitará el error de tiempo de ejecución.
- Evitar cálculos costosos: puede ser útil para evitar cálculos costosos que deben ejecutarse solo en condiciones específicas. A continuación se muestra el fragmento de código para ilustrar lo mismo:
C
int a = 0; // myfunc(b) will not be called if (a != 0 && myfunc(b)) { // do_something(); }
Explicación: en el ejemplo anterior, nunca se llamará a myfunc() ya que a != 0 se evalúa como false . Por lo tanto, si se va a realizar una operación costosa usando myfunc() solo bajo ciertas condiciones, entonces se puede evitar que la operación costosa se lleve a cabo cada vez usando una condición adecuada para el primer argumento.
Esto también se puede usar en el manejo de archivos para evitar la costosa tarea de tener un archivo listo cada vez que el archivo ya está listo como
esArchivoListo() || obtenerArchivoListo()
Ventajas de la evaluación de cortocircuito:
- Puede ser útil para evitar tareas computacionalmente costosas bajo ciertas circunstancias.
- Proporciona una verificación para el primer argumento sin el cual el segundo argumento puede generar un error de tiempo de ejecución.
Desventajas de la evaluación de cortocircuito:
- Puede causar un comportamiento inesperado si no se usa correctamente. Si alguna operación que realiza algún tipo de asignación de recursos del sistema/asignación de memoria se omite debido a un cortocircuito, es posible que tengamos un comportamiento inesperado.
- La ejecución del código se vuelve menos eficiente con rutas de ejecución en cortocircuito porque en algunos compiladores las nuevas comprobaciones de cortocircuitos son ciclos de ejecución adicionales en sí mismos.
Publicación traducida automáticamente
Artículo escrito por farzams101 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA