Operadores aritméticos do Dart

Operadores aritméticos binários básicos

São usados para cálculos entre dois números, existem 7 tipos no total, incluindo as quatro operações fundamentais, divisão inteira, resto da divisão e o operador unário de sinal negativo.

OperadorExplicação da função
+Adição
-Subtração
-expressãoSinal negativo unário (inverte o sinal do número)
*Multiplicação
/Divisão comum, o resultado sempre é do tipo double (ponto flutuante)
~/Divisão inteira, descarta a parte decimal e retorna int
%Módulo (pega o resto da divisão inteira)

A divisão tem uma característica diferente de outras linguagens: o operador / sempre retorna um número decimal. Se precisar de valor inteiro use ~/, um ponto muito importante para quem já tem experiência com programação.

Exemplo de código:

void main() {
        // Teste de adição, subtração, multiplicação, divisão, divisão inteira e módulo
	print(2 + 3 == 5);
	print(2 - 3 == -1);
	print(2 * 3 == 6);
	print(5 / 2 == 2.5);  // Divisão comum retorna double decimal
	print(5 ~/ 2 == 2);   // Divisão inteira mantém apenas a parte inteira int
	print(5 % 2 == 1);    // % retorna apenas o resto da divisão inteira

	// Exemplo de concatenação de string com quociente e resto
	print('5/2 = ${5 ~/ 2} r ${5 % 2}' == '5/2 = 2 r 1');
}Code language: Dart (dart)

Imagem do resultado da execução

Operadores de incremento / decremento

O Dart suporta duas formas prefixo e posfixo para o incremento ++ e o decremento --. A diferença principal: alterar a variável primeiro ou pegar seu valor original primeiro.

OperadorLógica de execuçãoValor retornado pela expressão
++varSomar 1 na variável primeiro, depois usar o novo valor no cálculoNovo valor após o incremento
var++Usar o valor original da variável no cálculo primeiro, depois somar 1 na variável ao finalValor original antes do incremento
--varSubtrair 1 da variável primeiro, depois usar o novo valor no cálculoNovo valor após o decremento
var--Usar o valor original da variável no cálculo primeiro, depois subtrair 1 da variável ao finalValor original antes do decremento
void main() {
	int a;
	int b;

	// 1. Incremento prefixo ++a: altera primeiro, depois atribui
	a = 0;
	b = ++a;
	print(a == b); // a=1, b=1 → true

	// 2. Incremento posfixo a++: atribui valor original primeiro, depois altera
	a = 0;
	b = a++;
	print(a != b); // a=1, b=0 → true

	// 3. Decremento prefixo --a: altera primeiro, depois atribui
	a = 0;
	b = --a;
	print(a == b); // a=-1, b=-1 → true

	// 4. Decremento posfixo a--: atribui valor original primeiro, depois altera
	a = 0;
	b = a--;
	print(a != b); // a=-1, b=0 → true
}
Code language: PHP (php)

Todos os prints do exemplo retornam true.

Aviso: colocar ++ ou — antes ou depois da variável gera comportamentos diferentes dentro de expressões.

Quando usados isoladamente, exemplo:

int a = 1;
++a;

int b  = 1;
b++;

print(a);
print(b);Code language: PHP (php)

O código acima imprime 2 em ambos os casos.

D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
2
2
Code language: CSS (css)

O mesmo vale para o –, a variável sempre será aumentada ou diminuída em uma unidade.

Mas se ++ e — forem parte de uma fórmula matemática, exemplo:

void main() {
  int a = 5;
  // Posfixo: usa o valor 5 no cálculo primeiro, depois a passa para 6
  int res1 = a++ * 2;
  print(res1); // 10
  print(a);  // 6

  int b= 5;
  // Prefixo: altera b para 6 primeiro, depois faz o cálculo
  int res2 = ++b * 2;
  print(res2); // 12
  print(b); // 6
}Code language: PHP (php)

A e b terminam com valor igual a 6, mas res1 e res2 têm resultados diferentes apenas por causa da posição do ++.

Explicação do posfixo a++: primeiro calcula a*2=10 com a ainda valendo 5, salva esse valor em res1 e depois incrementa a para 6.

No prefixo ++b: primeiro soma 1 em b para ficar 6, depois calcula 6*2=12 que vai para res2.

A linha int res1 = a++ * 2; é equivalente a:

int res1 = a * 2;
a = a +1;

A linha int res2 = ++b * 2; é equivalente a:

b = b+1;
int res2 = b * 2;

Mnemônico para lembrar:

Prefixo altera primeiro, posfixo usa primeiro;

Prefixo retorna o valor novo, posfixo retorna o valor original.

Resumo

Prefixo ++a / --a: altere a variável primeiro, depois use o valor modificado para cálculos ou atribuições

Posfixo a++ / a--: use o valor original da variável para cálculos ou atribuições primeiro, e após finalizar a operação altere a variável

Você pode testar os exemplos abaixo:

void main() {
  int a = 0;
  int b = ++a; 
  // Passo 1: a = a + 1 → a=1
  // Passo 2: atribui o novo valor de a (1) para b
  print(a); // 1
  print(b); // 1
}
void main() {
  int a = 0;
  int b = a++;
  // Passo 1: atribui o valor original de a (0) para b
  // Passo 2: executa a = a + 1 → a=1
  print(a); // 1
  print(b); // 0
}
void main() {
  int a = 0;
  int b = --a;
  // Passo 1: a = a - 1 → a=-1
  // Passo 2: atribui o novo valor de a (-1) para b
  print(a); // -1
  print(b); // -1
}
void main() {
  int a = 0;
  int b = a--;
  // Passo 1: atribui o valor original de a (0) para b
  // Passo 2: executa a = a - 1 → a=-1
  print(a); // -1
  print(b); // 0
}

Estes são os exemplos mais simples de incremento e decremento prefixo e posfixo. Compile e execute você mesmo para perceber a diferença.

Deixe um comentário

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