En informática , una expresión es una entidad sintáctica en un lenguaje de programación que puede evaluarse para determinar su valor . [1] Es una combinación de una o más constantes , variables , funciones y operadores que el lenguaje de programación interpreta (según sus reglas particulares de precedencia y asociación ) y calcula para producir ("devolver", en un entorno con estado ) otro valor. Este proceso, para expresiones matemáticas , se llama evaluación . En configuraciones simples, el valor resultante suele ser uno de varios tipos primitivos , como cadena , booleano o numérico (como entero , punto flotante o complejo ).
Las expresiones a menudo se contrastan con las declaraciones : entidades sintácticas que no tienen valor (una instrucción).
2 + 3
es una expresión aritmética y de programación, que evalúa a 5
. Una variable es una expresión porque denota un valor en la memoria , por lo que y + 6
también es una expresión. Un ejemplo de una expresión relacional es 4 ≠ 4
, que evalúa a false
. [2] [3]
En C y la mayoría de los lenguajes derivados de C, una llamada a una función con un tipo de retorno void es una expresión válida, de tipo void. [4] No se pueden utilizar valores de tipo void, por lo que el valor de dicha expresión siempre se descarta.
En muchos lenguajes de programación, una función, y por lo tanto una expresión que contiene una función, puede tener efectos secundarios . Una expresión con efectos secundarios normalmente no tiene la propiedad de transparencia referencial . En muchos lenguajes (por ejemplo, C++ ), las expresiones pueden terminarse con un punto y coma ( ;
) para convertir la expresión en una declaración de expresión . Esto le pide a la implementación que evalúe la expresión solo por sus efectos secundarios y que ignore el resultado de la expresión (por ejemplo, x+1;
) a menos que sea parte de una declaración de expresión que induzca efectos secundarios (por ejemplo, y=x+1;
o func1(func2());
).
La noción formal de un efecto secundario es un cambio en el estado abstracto del programa en ejecución.
Otra clase de efectos secundarios son los cambios en el estado concreto del sistema computacional, como la carga de datos en memorias caché . Los lenguajes que suelen describirse como "libres de efectos secundarios" generalmente seguirán teniendo efectos secundarios concretos que pueden explotarse, por ejemplo, en ataques de canal lateral .
Además, el tiempo transcurrido al evaluar una expresión (incluso una sin otros efectos secundarios aparentes) a veces es esencial para el correcto funcionamiento de un sistema, ya que el comportamiento en el tiempo es fácilmente visible desde fuera del entorno de evaluación por otras partes del sistema con el que interactúa, e incluso podría considerarse como el efecto principal , como cuando se realizan pruebas comparativas .
Depende de la especificación del lenguaje de programación particular si una expresión sin efectos secundarios abstractos puede ser eliminada legalmente de la ruta de ejecución por el entorno de procesamiento en el que se evalúa la expresión.