Precedencia y asociatividad de Swift Operator (con ejemplos)

En este artículo, aprenderá sobre las reglas que se utilizan para evaluar una expresión con operadores y operandos.

Precedencia del operador rápido

La precedencia de operadores es una colección de reglas que se utilizan para evaluar una expresión matemática determinada. Cuando se utilizan varios operadores en una sola expresión, cada parte se evalúa en un orden determinado llamado precedencia de operadores. Algunos operadores tienen mayor prioridad que otros, lo que afecta la forma en que se evalúa una expresión.

Tabla de precedencia de operadores

La siguiente tabla enumera la precedencia de los operadores en Swift. Cuanto más alto aparezca en la tabla, mayor será su precedencia.

Grupos de precedencia de biblioteca estándar de Swift (de mayor a menor)
Grupos de operadores Ejemplos
Prioridad de desplazamiento bit a bit >> & <>>>
Precedencia de multiplicación & *% & * /
Precedencia de adición | & + Y - + - ^
Precedencia de formación de rango … <…
Prioridad de casting es como
Precedencia nula-coalescente ??
Prioridad de comparación ! => = <= === ==
Precedencia de conjunción lógica &&
Precedencia de disyunción lógica ||
Precedencia predeterminada ~>
Precedencia ternaria ?:
Prioridad de flechas de función ()
Prioridad de asignación | =% = / = & <> = & = * = >> = << = = + = - =

Ejemplo 1: precedencia de operadores rápidos

 let x = 4 + 5 * 5 print(x) 

Cuando ejecute el programa anterior, la salida será:

 29

En el ejemplo anterior, si lee la expresión de izquierda a derecha, podría esperar que la salida sea 45. Pero, el operador de multiplicación tiene una precedencia mayor que el operador de suma, por lo que la expresión 4 + 5 * 5 se evalúa como 4 + (5 * 5). Por lo tanto, print(x)genera 29 en la pantalla.

Pasos de ejecución
Pasos Operador Expresión Valor devuelto por expresión
1 * 5 * 5 25
2 + 4 + 25 29
3 = imprimir (x) 29

Ejemplo 2: Prioridad de operador rápido con operador de asignación compleja

 var y = 15 y += 10 - 2 * 3 print(y) 

Cuando ejecute el programa anterior, la salida será:

 19

En el ejemplo anterior, la expresión var y = 15asigna el valor 15 en la variable y.

En la siguiente expresión, y += 10 - 2 * 3el operador de multiplicación tiene mayor precedencia que el operador de resta y asignación compuesta ( +=).

Por tanto, la expresión y += 10 - 2 * 3se evalúa como y = y + (10 - (2 * 3)).

Pasos de ejecución
Pasos Operador Expresión Valor devuelto por expresión
1 = var y = 15 15
2 * 2 * 3 6
3 - 10 - 6 4
4 + = 15 + 4 19

Asociatividad de operador rápido

Aunque existen reglas predefinidas definidas por la precedencia del operador para evaluar una expresión, es posible que se pregunte qué sucede si hay varios operadores del mismo nivel de precedencia. La asociatividad de operadores define cómo se agrupan los operadores de la misma precedencia.

En Swift, los operadores pueden ser asociativos por la izquierda, asociativos por la derecha o no tener asociatividad. Los operadores que son asociativos por la izquierda, agrupan sus operandos desde la izquierda de la instrucción, los operadores asociativos por la derecha desde la derecha y los operadores sin asociatividad no tienen un comportamiento definido cuando se usan en secuencia en una expresión.

Tabla de asociatividad de operadores

La siguiente tabla muestra la asociatividad de los operadores Swift junto con la precedencia.

Asociatividad de biblioteca estándar rápida (precedencia de mayor a menor)
Grupos de operadores Ejemplos Asociatividad
Prioridad de desplazamiento bit a bit >> & <>>> ninguna
Precedencia de multiplicación & *% & * / izquierda
Precedencia de adición | & + Y - + - ^ izquierda
Precedencia de formación de rango … <… ninguna
Prioridad de casting es como ninguna
Precedencia nula-coalescente ?? derecho
Prioridad de comparación ! => = <= === == ninguna
Precedencia de conjunción lógica && izquierda
Precedencia de disyunción lógica || izquierda
Precedencia predeterminada ~> ninguna
Precedencia ternaria ?: derecho
Prioridad de flechas de función () derecho
Prioridad de asignación | =% = / = & <> = & = * = >> = << = = derecho

Ejemplo 3: Asociatividad del operador Swift

 let x = 40 / 2 * 10 print(x) 

Cuando ejecute el programa anterior, la salida será:

 200

En el programa anterior, la expresión se evalúa de izquierda a derecha porque los operadores caen en grupos de precedencia de multiplicación y tienen asociatividad a la izquierda. Por lo tanto, la operación de división se realiza antes y obtiene el resultado 200 . ¿Qué pasa si primero quieres ejecutar la multiplicación? Debe ajustar la 2 * 10expresión entre llaves () como:

 let x = 40 / (2 * 10) print(x) 

Cuando ejecute el programa anterior, la salida será:

 2

No es necesario que memorice la tabla de precedencia y asociativa. La mayoría de las veces, la precedencia y asociatividad de los operadores tiene sentido en sí misma. Siempre puede utilizar la tabla como referencia en caso de duda. Además, es mejor usar paréntesis para facilitar la comprensión del código.

Articulos interesantes...