CodeGym /Cursos /C# SELF /Prioridade dos operadores e parênteses em condições

Prioridade dos operadores e parênteses em condições

C# SELF
Nível 3 , Lição 4
Disponível

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

Primeiro é avaliado a > 0 && b < 10, depois o resultado é comparado com c == 3 usando ||

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 && isCitizentrue && falsefalse
  • false || truetrue

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!

2
Tarefa
C# SELF, nível 3, lição 4
Bloqueado
Condição simples
Condição simples
2
Tarefa
C# SELF, nível 3, lição 4
Bloqueado
Verificação de uma expressão lógica complexa
Verificação de uma expressão lógica complexa
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION