Operadores em Dart

O Dart suporta todos os operadores listados na tabela abaixo, a tabela é ordenada por prioridade do maior ao menor

ClassificaçãoOperadoresAssociatividade
Operadores unários pós-fixosexpr++ expr-- () [] ?[] . ?. !Sem associatividade
Operadores unários pré-fixos- expr ! expr ~ expr ++ expr -- expr await exprSem associatividade
Multiplicação e divisão* / % ~/Associativo à esquerda
Adição e subtração+ -Associativo à esquerda
Deslocamento de bits<< >> >>>Associativo à esquerda
AND bit a bit&Associativo à esquerda
XOR bit a bit^Associativo à esquerda
OR bit a bit|Associativo à esquerda
Relacional e verificação de tipo>= > <= < as is is!Sem associatividade
Comparação de igualdade== !=Sem associatividade
AND lógico&&Associativo à esquerda
OR lógico||Associativo à esquerda
Operador de coalescência nula??Associativo à esquerda
Operador ternário condicionalexpr1 ? expr2 : expr3Associativo à direita
Operadores em cascata.. ?..Associativo à esquerda
Operadores de atribuição= *= /= += -= &= ^= etc.Associativo à direita
Operador spread (ver nota)... ...?Sem associatividade

Usando os operadores acima combinados com operandos, podemos construir expressões de cálculo

Exemplos simples:

a++
a + b
a = b
a == b
c ? a : b
a is T

Abaixo um exemplo funcional completo:

void main() {
  // 1. Expressão de incremento pós-fixo a++
  int a = 10;
  print("1. Incremento pós-fixo a++");
  print("Antes do incremento a = $a");
  int temp = a++; // Pega o valor primeiro, depois incrementa
  print("temp (valor obtido) = $temp");
  print("Após o incremento a = $a\n");

  // 2. Expressão de soma a + b
  int b = 20;
  int soma = a + b;
  print("2. Soma a + b");
  print("$a + $b = $soma\n");

  // 3. Expressão de atribuição a = b
  a = b;
  print("3. Atribuição a = b");
  print("Após atribuição a = $a\n");

  // 4. Comparação de igualdade a == b
  bool igual = a == b;
  print("4. Comparação de igualdade a == b");
  print("Resultado de a == b: $igual\n");

  // 5. Expressão ternária condicional c ? a : b
  int c = 5;
  String resultado = c > 0 ? "c é um número positivo" : "c é negativo ou zero";
  print("5. Operador ternário c ? a : b");
  print("Verificação c>0: $resultado\n");

  // 6. Verificação de tipo a is T
  dynamic valorTeste = 100;
  print("6. Verificação de tipo a is T");
  print("valorTeste é int: ${valorTeste is int}");
  print("valorTeste é String: ${valorTeste is String}");
}
Code language: Dart (dart)

Copie o código acima e execute com o comando: dart run

Regras centrais de prioridade de operadores

1. Lógica da ordem de prioridade

A tabela de operadores tem prioridade decrescente de cima para baixo: os operadores das linhas superiores têm maior prioridade e são executados primeiro.

Exemplo: o símbolo > significa “tem maior prioridade”, não comparação de valores.

Ordem de execução: resto da divisão % > comparação de igualdade == > AND lógico &&

Desconstrução da execução da expressão n % i == 0 && d % i == 0:

  1. Primeiro calcula n % i, d % i (% tem a maior prioridade)
  2. Depois realiza as duas comparações ==
  3. Por último executa o AND lógico central &&
2 Função dos parênteses

Os parênteses ((n % i == 0) && (d % i == 0)) apenas melhoram a legibilidade do código, não alteram a ordem original de execução;

A versão sem parênteses n % i == 0 && d % i == 0 segue a prioridade nativa, ambos trechos têm lógica e resultados totalmente idênticos;

Observação complementar: apenas quando for necessário quebrar a prioridade padrão, os parênteses mudam a ordem de execução.

void main() {
  int n = 10;
  int d = 20;
  int i = 2;

  // Forma 1: com parênteses, legibilidade superior
  if ((n % i == 0) && (d % i == 0)) {
    print("Forma 1: divisível sem resto");
  }

  // Forma 2: sem parênteses, segue a prioridade nativa, resultado igual
  if (n % i == 0 && d % i == 0) {
    print("Forma 2: divisível sem resto");
  }
}

Resultado da execução:

Forma 1: divisível sem resto
Forma 2: divisível sem resto

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *