A alto nivel, una expresión es una unidad de código válida que se resuelve en un valor. Hay dos tipos de expresiones: las que tienen efectos secundarios (como la asignación de valores) y las que se limitan a evaluar.
La expresión 3 + 4 es un ejemplo del segundo tipo. Esta expresión utiliza el operador + para sumar 3 y 4 y produce un valor, 7. Sin embargo, si no forma parte finalmente de una construcción mayor (por ejemplo, una declaración de variable como const z = 3 + 4), su resultado se descartará inmediatamente – esto suele ser un error del programador porque la evaluación no produce ningún efecto.
Estos operadores unen operandos formados por operadores de mayor precedencia o una de las expresiones básicas. La lista completa y detallada de operadores y expresiones también está disponible en la referencia.
A pesar de que * y + vienen en órdenes diferentes, ambas expresiones darían como resultado 7 porque * tiene precedencia sobre +, por lo que la expresión unida con * siempre se evaluará primero. Puedes anular la precedencia de los operadores utilizando paréntesis (lo que crea una expresión agrupada – la expresión básica). Para ver una tabla completa de precedencia de operadores, así como varias advertencias, vea la página de Referencia de Precedencia de Operadores.
El operador APPLY nos permite invocar una función con valor de tabla para cada fila devuelta por una expresión de tabla externa de una consulta. El operador APPLY nos permite unir dos expresiones de tabla; la expresión de tabla derecha se procesa cada vez para cada fila de la expresión de tabla izquierda. La expresión de la tabla izquierda se evalúa primero y luego la expresión de la tabla derecha se evalúa contra cada fila de la expresión de la tabla izquierda para el conjunto de resultados final. La lista de columnas producida por el operador APPLY es el conjunto de columnas de la entrada izquierda seguido de la lista de columnas devuelta por la entrada derecha.
CROSS APPLY devuelve sólo las filas de la tabla exterior que producen un conjunto de resultados de la función con valor de tabla. En otras palabras, el resultado de CROSS APPLY no contiene ninguna fila de la expresión de la tabla del lado izquierdo para la que no se obtiene ningún resultado de la expresión de la tabla del lado derecho. CROSS APPLY funciona como un INNER JOIN fila por fila.
Si se producen varias operaciones en una expresión, cada parte se evalúa y resuelve en un orden predeterminado llamado Precedencia de Operadores. Los paréntesis pueden utilizarse para anular el orden de precedencia y evaluar algunas partes de una expresión antes que otras. Las operaciones dentro de los paréntesis siempre se realizan antes que las que están fuera. Sin embargo, dentro de los paréntesis se mantiene la precedencia normal de los operadores.
Si las expresiones contienen operadores de más de una categoría, los operadores aritméticos se evalúan primero, los operadores de comparación después y los operadores lógicos por último. Todos los operadores de comparación tienen la misma precedencia; se evalúan en el orden de izquierda a derecha en el que aparecen. Los operadores aritméticos y lógicos se evalúan en el siguiente orden de precedencia:
El operador de concatenación de cadenas (&) no es un operador aritmético, pero en la precedencia, sí cae después de todos los operadores aritméticos y antes de todos los operadores de comparación. El operador Is es un operador de comparación de referencia de objetos. No compara objetos ni sus valores; sólo comprueba si dos referencias de objeto se refieren al mismo objeto.
Artículo AccionesPrecedencia de los operadoresLa precedencia de los operadores determina cómo se analizan los operadores entre sí. Los operadores con mayor precedencia se convierten en los operandos de los operadores con menor precedencia.PruébaloPrecedencia y asociatividadConsidera una expresión que se describe en la siguiente representación, en la que tanto OP1 como OP2 son operadores de relleno.
Si OP1 y OP2 tienen diferentes niveles de precedencia (véase la tabla siguiente), el operador con mayor precedencia va primero y la asociatividad no importa. Observe cómo la multiplicación tiene mayor precedencia que la adición y se ejecuta primero, aunque la adición se escribe primero en el código.
Dentro de los operadores de la misma precedencia, el lenguaje los agrupa por asociatividad. La asociatividad a la izquierda (de izquierda a derecha) significa que se interpreta como (a OP1 b) OP2 c, mientras que la asociatividad a la derecha (de derecha a izquierda) significa que se interpreta como a OP1 (b OP2 c). Los operadores de asignación son asociativos a la derecha, por lo que se puede escribir
con el resultado esperado de que a y b obtienen el valor 5. Esto se debe a que el operador de asignación devuelve el valor asignado. Primero, b se establece en 5. Luego, a también se establece en 5 – el valor de retorno de b = 5, también conocido como el operando derecho de la asignación.