Precedência e associatividade do operador Swift (com exemplos)

Neste artigo, você aprenderá sobre as regras usadas para avaliar uma expressão com operadores e operandos.

Precedência do operador Swift

A precedência do operador é uma coleção de regras usadas para avaliar uma determinada expressão matemática. Quando há vários operadores usados ​​em uma única expressão, cada parte é avaliada em uma determinada ordem chamada de precedência de operador. Certos operadores têm prioridade mais alta do que outros, o que afeta como uma expressão é avaliada.

Tabela de precedência de operador

A tabela abaixo lista a precedência dos operadores em Swift. Quanto mais alto ele aparecer na tabela, maior será sua precedência.

Grupos de precedência da biblioteca padrão Swift (da mais alta para a mais baixa)
Grupos de Operadores Exemplos
Precedência de deslocamento bit a bit >> & <>>>
Precedência de multiplicação & *% & * /
Precedência de adição | & + & - + - ^
Precedência de formação de alcance … <…
Precedência de fundição é tão
Precedência Nil-Coalescing ??
Precedência de comparação ! => = <= === ==
Precedência de conjunção lógica &&
Precedência de disjunção lógica ||
Precedência padrão ~>
Precedência ternária ?:
Precedência de seta de função ()
Precedência de Atribuição | =% = / = & <> = & = * = >> = << = = + = - =

Exemplo 1: Precedência do operador Swift

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

Quando você executa o programa acima, a saída será:

 29

No exemplo acima, se você ler a expressão da esquerda para a direita, pode esperar que a saída seja 45. Mas, o operador de multiplicação tem uma precedência maior do que o operador de adição, então a expressão 4 + 5 * 5 é avaliada como 4 + (5 * 5). Portanto, print(x)produz 29 na tela.

Etapas de execução
Passos Operador Expressão Valor retornado da expressão
1 * 5 * 5 25
2 + 4 + 25 29
3 = imprimir (x) 29

Exemplo 2: Precedência do operador Swift com operador de atribuição complexo

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

Quando você executa o programa acima, a saída será:

 19

No exemplo acima, a expressão var y = 15atribui o valor 15 na variável y.

Na próxima expressão, y += 10 - 2 * 3o operador de multiplicação tem uma precedência maior do que o operador de subtração e atribuição composta ( +=).

Portanto, a expressão y += 10 - 2 * 3é avaliada como y = y + (10 - (2 * 3)).

Etapas de execução
Passos Operador Expressão Valor retornado da expressão
1 = var y = 15 15
2 * 2 * 3 6
3 - 10 - 6 4
4 + = 15 + 4 19

Associatividade do operador Swift

Embora existam regras predefinidas definidas pela precedência do operador para avaliar uma expressão, você pode estar se perguntando o que acontece se houver vários operadores do mesmo nível de precedência. A associatividade do operador define como os operadores da mesma precedência são agrupados.

No Swift, os operadores podem ser associativos à esquerda, associativos à direita ou não têm associatividade. Operadores que são associativos à esquerda agrupam seus operandos da esquerda da instrução, operadores associativos à direita da direita e operadores sem associatividade não têm comportamento definido quando usados ​​em sequência em uma expressão.

Tabela de associatividade do operador

A tabela abaixo mostra a associatividade dos operadores Swift junto com a precedência.

Associatividade da biblioteca padrão Swift (precedência mais alta para mais baixa)
Grupos de Operadores Exemplos Associatividade
Precedência de deslocamento bit a bit >> & <>>> Nenhum
Precedência de multiplicação & *% & * / esquerda
Precedência de adição | & + & - + - ^ esquerda
Precedência de formação de alcance … <… Nenhum
Precedência de fundição é tão Nenhum
Precedência Nil-Coalescing ?? certo
Precedência de comparação ! => = <= === == Nenhum
Precedência de conjunção lógica && esquerda
Precedência de disjunção lógica || esquerda
Precedência padrão ~> Nenhum
Precedência ternária ?: certo
Precedência de seta de função () certo
Precedência de Atribuição | =% = / = & <> = & = * = >> = << = = certo

Exemplo 3: Associatividade do operador Swift

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

Quando você executa o programa acima, a saída será:

 200

No programa acima, a expressão é avaliada da esquerda para a direita porque os operadores caem em grupos de precedência de multiplicação e têm associatividade à esquerda. Portanto, a operação de divisão ocorre mais cedo e você obtém o resultado 200 . E se você quiser executar a multiplicação primeiro? Você precisa envolver a 2 * 10expressão entre () colchetes como:

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

Quando você executa o programa acima, a saída será:

 2

Você não precisa memorizar a tabela de precedência e associativa. Na maioria das vezes, a precedência e a associatividade dos operadores fazem sentido por si só. Você sempre pode usar a tabela como referência em caso de dúvida. Além disso, é melhor usar parênteses para tornar seu código mais fácil de entender.

Artigos interessantes...