1. Introdução
Bora começar com uma analogia do dia a dia. Imagina uma receita:
Misture a farinha, os ovos e o açúcar bata adicione a manteiga bata de novo.
Parece estranho, né? Agora imagina que entre as palavras "bata" e "adicione" tem uma vírgula ou parênteses. A ordem das ações já fica bem mais clara.
Na programação rola a mesma parada quando você escreve uma expressão complicada:
bool result = a > 0 && b < 10 || c == 3;
Qual a ordem? O que é calculado primeiro: a > 0 && b < 10, depois || c == 3? Ou é tudo ao contrário? Sem uma ordem certinha de avaliação, o computador pode "misturar os ingredientes" e o resultado vai ser inesperado.
2. Prioridade dos operadores em C#
C# (igual à maioria das linguagens de programação) usa uma tabela de prioridades dos operadores.
Operadores com prioridade mais alta são executados antes dos de prioridade mais baixa.
Dá uma olhada na parte mais importante dessa tabela (pra expressões condicionais):
| Operador | Descrição | Prioridade |
|---|---|---|
| () | Parênteses | mais alta |
| ! | Lógico "NÃO" | alta |
| ==, != | Igual / diferente | média |
| <, >, <=, >= | Comparações | média |
| && | Lógico "E" | mais baixa |
| || | Lógico "OU" | ainda mais baixa |
(Tem também operadores aritméticos — eles têm prioridade mais alta que os lógicos.)
Regra principal
O operador "E" (&&) tem prioridade maior que o "OU" (||),
ou seja, primeiro vai ser avaliado o "E", depois o "OU".
Fluxograma de avaliação da prioridade das condições
Na prática: a > 0 && b < 10 || c == 3 — primeiro é avaliado a > 0 && b < 10, depois o resultado é comparado com c == 3 usando ||.
3. Direção dos operadores: da esquerda pra direita e vice-versa
Além da prioridade, tem outra palavra: associatividade.
É a regra de qual direção os operadores são avaliados quando estão "lado a lado" e têm a mesma prioridade.
Exemplo:
bool a = true, b = false, c = true;
bool result = a && b && c;
Pergunta: como vai ser avaliado?
Resposta: a associatividade do && é da esquerda pra direita.
Então, primeiro a && b, depois o resultado com c.
Aplicando nas condições:
| Operador | Associatividade |
|---|---|
| &&, || | da esquerda pra direita |
| ! | da direita pra esquerda |
4. Parênteses — seu melhor amigo em condições complicadas
É aqui que começa a mágica (e a salvação). Quando você escreve uma expressão, os parênteses mudam a prioridade e deixam seu código mais claro e seguro.
Exemplo 1 (sem parênteses):
// Queremos: "Se o usuário é adulto e cidadão, ou se ele tem passe especial"
bool isAdult = age >= 18;
bool isCitizen = country == "Bielorrússia";
bool hasPermit = hasSpecialPass == true;
if (isAdult && isCitizen || hasPermit)
{
Console.WriteLine("Acesso liberado!");
}
Como o C# avalia:
Primeiro avalia isAdult && isCitizen, depois compara o resultado com hasPermit usando ||.
- Supondo que isAdult = true, isCitizen = false, hasPermit = true
isAdult && isCitizen→true && false→falsefalse || true→true
Ou seja, se a pessoa tem passe especial, vai entrar de qualquer jeito.
E se não tiver passe, mas for adulto e cidadão — também entra.
Exemplo 2 (com parênteses):
if (isAdult && (isCitizen || hasPermit))
{
Console.WriteLine("Acesso liberado!");
}
Agora o programa primeiro verifica:
isCitizen || hasPermit, e depois esse resultado junto com isAdult.
Ou seja, você precisa ser adulto e (ou cidadão, ou ter passe especial).
Uma diferença pequena nos parênteses — uma diferença gigante na lógica!
GO TO FULL VERSION