programacion-precedencia-operadores

Precedencia de operadores

La precedencia de operadores en programación se refiere a la reglas que establecen el orden en que se deben ejecutar las operaciones dentro de una expresión.

En otras palabras, cuando tenemos una expresión que tiene múltiples operadores, no todos tienen la misma prioridad. Si encontramos una expresión como:

let a = 2 + 3 * 5

¿Se calcula primero el =, el + o el *?

En general, la precedencia de operadores en programación está estrechamente relacionada con las reglas de cálculo matemáticas. De hecho, en muchos casos se emplean las mismas regla, como que las operaciones de multiplicación y división se realizan antes que las de suma y resta.

Sin embargo, en programación, existen algunos operadores adicionales, que se emplean continuamente. Por tanto, las reglas de precedencia son algo más extensos y complejos.

Ejemplo de precedencia de operadores

Veamos un ejemplo para entender mejor la precedencia de operadores en programación. Supongamos que queremos calcular el valor de la siguiente expresión:

2 + 3 * 4   
14              // la expresión anterior vale 14

Si seguimos las reglas de cálculo matemáticas, primero se debe realizar la multiplicación y después la suma. Por lo tanto, el resultado será 14.

2 + 3 * 4
2 + (3 * 4)     // lo anterior es lo mismo que
2 + 12          // resolvemos primero 3 * 4
14              // finalmente sumamos, resultando 14

Si quisiéramos forzar que la suma se realice primero, podríamos utilizar paréntesis para indicar qué operaciones se deben realizar primero. Por ejemplo:

(2 + 3) * 4 

En este caso, la suma se realiza primero debido a los paréntesis, por lo que el resultado sería 20.

(2 + 3) * 4
5 * 4            // se calcula primero el paréntesis (2+3)
20               // finalmente se multiplica, resultando 20

Tabla de precedencia de operadores comunes

A continuación, se presenta una tabla con la precedencia de operadores comunes en programación, de mayor a menor precedencia:

  • Paréntesis: Los operadores dentro de paréntesis se evalúan primero. Los paréntesis se utilizan para alterar la precedencia y forzar el orden deseado de evaluación.
  • Exponenciación: De existir, los operadores de exponenciación se evalúan después de los paréntesis. Este operador se utiliza para elevar un número a una potencia.
  • Multiplicación, división y módulo: Estos operadores tienen una precedencia superior a la de la suma y la resta. Se evalúan de izquierda a derecha, a menos que se utilicen paréntesis para alterar el orden.
  • Suma y resta: Estos operadores se evalúan después de la multiplicación, la división y el módulo. Al igual que los operadores anteriores, se evalúan de izquierda a derecha a menos que se utilicen paréntesis.
  • Operadores de comparación: Los operadores de comparación (como menor que <, mayor que >) tienen una precedencia menor que los operadores aritméticos.
  • Operadores de equidad: Los operadores de equidad (igual a == y distinto a !=) tienen una precedencia inferior a los de comparación.
  • Operador lógico AND: A continuación tendríamos los operadores lógicos. Generalmente el operador lógico ANDtiene mayor precedencia.
  • Operador lógico OR: Finalmente, terminamos nuestro listado genérico con el operador lógico OR, que tiene precedencia inferior a todos los anteriores.

En el caso de que haya varios operadores con la misma preferencia, en caso de empate se ejecutan de izquierda a derecha. Por ejemplo:

3 * 4 / 7 % 9

((3 * 4) / 7) % 9     // es equivalente a

Por ejemplo, en lenguaje SQL la expresión:

A OR B AND C OR D

Es equivalente a esta expresión:

(A OR B) AND (C OR D)

Este orden de precedencias es más o menos habitual en la mayoría de lenguajes, y está diseñado para evitarnos poner paréntesis en la mayoría de los casos.

Sin embargo, es la precedencia de operadores puede variar dependiendo del lenguaje de programación que utilicemos. Por lo que siempre es importante revisar la documentación del lenguaje para entender cómo se manejan los operadores en ese caso en particular.

Buenas prácticas y consejos de limpieza Consejos

Aunque la precedencia de operadores puede ser útil para escribir expresiones más concisas, también puede resultar confusa en algunos casos.

Por ejemplo, supongamos que tengamos esta expresión.

resultado = a * b + c / a - b

Es relativamente sencilla, pero imaginad que en un caso real podría ser una sentencia más larga y compleja.

Aún cuando no sea necesario, si estimáis que es necesario para mejorar la legibilidad, que no os importe poner paréntesis de más para clarificar y controlar el orden de la evaluación.

resultado = (a * b) + (c / a) - b

Incluso, si es necesario, podemos dividir la expresión compleja en varias líneas utilizando variables intermedias para almacenar los resultados parciales.

factor1 = a * b
factor2 = c / a
resultado = factor1 + factor2 - b