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.
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 = 15
atribui o valor 15 na variável y.
Na próxima expressão, y += 10 - 2 * 3
o 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))
.
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 * 10
expressã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.