A seguinte táboa mostra os operadores de Dart, ordenados por precedencia (de maior a menor):
Descrición e explicación
Operadores
Exemplo
Unarios postfix. Acceden ou modifican valores ao final dunha expresión.
expr++, expr--, (), [], ?.[], ., ?., !
lista[0], contador++, usuario?.nome
Unarios prefix. Aplican unha operación antes de avaliar a expresión.
-expr, !expr, ~expr, ++expr, --expr, await
-x, !condición, await tarefa
Multiplicativos. Multiplicación, división, módulo e división enteira.
*, /, %, ~/
6 * 3, 10 ~/ 3
Aditivos. Suma ou resta de valores.
+, -
a + b, x - y
Desprazamento. Despraza bits á esquerda ou dereita.
<<, >>, >>>
n << 1, n >> 2
Bit a bit AND. Compara os bits e devolve 1 só cando ambos son 1.
&
5 & 3
Bit a bit XOR. Compara bits: devolve 1 só se son diferentes.
^
5 ^ 3
Bit a bit OR. Compara bits: devolve 1 se algún dos dous é 1.
|
5 | 2
Relacionais e de tipo. Comparacións ou comprobación de tipo.
>=, >, <=, <, as, is, is!
x is int, nota >= 5
Igualdade. Comproba se dous valores son iguais ou distintos.
==, !=
a == b, nome != null
Lóxico AND. Verdade só se ambas condicións son verdadeiras.
&&
x > 0 && x < 10
Lóxico OR. Verdade se algunha das condicións é verdadeira.
||
x == 0 || y == 0
Valor por defecto se é nulo. Devolve o primeiro valor non nulo.
??
valor ?? 'por defecto'
Condicional ternario. Escolla entre dúas opcións segundo unha condición.
cond ? expr1 : expr2
x > 0 ? 'positivo' : 'negativo'
Cascada. Encadea varias operacións sobre o mesmo obxecto.
.., ?..
obx..metodo1()..metodo2()
Asignación. Atribúe valores, ou realiza operacións acumulativas.
=, +=, -=, *=, /=, ??=, etc.
x = 5, contador += 1, nome ??= 'Anónimo'
Spread (coleccións). Expande os elementos doutra lista ou colección.
..., ...?
[1, 2, ...outraLista]
➗ Operadores aritméticos
Operador
Significado
Exemplo
+
Suma
3 + 2 → 5
-
Resta ou signo negativo
5 - 1 → 4
*
Multiplicación
4 * 3 → 12
/
División (resultado double)
7 / 2 → 3.5
~/
División enteira (sen decimais)
7 ~/ 2 → 3
%
Resto (módulo)
7 % 2 → 1
Operadores de incremento/decremento:
Operador
Significado
Exemplo
++var
Incrementa antes de usar
var a = 3; print(++a); → imprime 4
var++
Usa o valor, logo incrementa
var a = 3; print(a++); → imprime 3, despois a = 4
--var
Decrementa antes de usar
var a = 3; print(--a); → imprime 2
var--
Usa o valor, logo decrementa
var a = 3; print(a--); → imprime 3, despois a = 2
🔁 Operadores de igualdade e relación
📌 Estes operadores devolven sempre un valor booleano (true ou false) e usanse sobre todo en condicións if, bucles e filtros de listas.
Operador
Significado
Exemplo
==
Igualdade
5 == 5 → true
!=
Distinto
3 != 4 → true
>
Maior que
7 > 2 → true
<
Menor que
1 < 0 → false
>=
Maior ou igual que
6 >= 6 → true
<=
Menor ou igual que
2 <= 5 → true
🧪 Operadores de tipo
Operador
Significado
Exemplo
as
Conversión de tipo (cast)
obxecto as String → forza a que sexa String
is
Verdadeiro se o obxecto é dese tipo
"Ola" is String → true
is!
Verdadeiro se NON é dese tipo
123 is! String → true
📌 O operador as úsase para converter un obxecto dun tipo a outro (se é seguro), mentres que is e is! serven para comprobar o tipo dun obxecto sen cambialo.
void main() {
Object valor = 'Texto';
if (valor is String) {
print(valor.length); // ✅ Podemos acceder a .length
}
dynamic outro = 42;
print((outro as int).isEven); // ✅ Convertimos a int
}
📝 Operadores de asignación
Operador
Significado
Exemplo
=
Asignación
a = 5 → a vale 5
??=
Asignar só se o valor actual é null
nome ??= 'Anónimo' → asigna o valor 'Anónimo' sempre que nome sexa null
+=, -=, *=, /=
Combinan operación e asignación
total += 10 → igual a total = total + 10
🔗 Operadores lóxicos
Operador
Significado
Exemplo usando if
!expr
Negación lóxica (non)
if (!tenChave) print('Non tes chave, non podes entrar');
&&
AND lóxico (true se ambos o son)
if (chove && levasParaugas) print('Podes saír tranquilo');
||
OR lóxico (true se un é true)
if (éFestivo || éFinDeSemana) print('Hoxe non hai clase');
🧮 Operadores bit a bit e desprazamento
Operador
Significado
Exemplo
&
AND bit a bit
5 & 3 → 1 // 0101 & 0011 = 0001
|
OR bit a bit
5 | 2 → 7 // 0101 | 0010 = 0111
^
XOR bit a bit
6 ^ 3 → 5 // 0110 ^ 0011 = 0101
~
Complemento bit a bit
~2 → -3 // invirte todos os bits
<<
Desprazamento á esquerda
3 << 1 → 6 // 0011 << 1 = 0110
>>
Desprazamento á dereita
8 >> 2 → 2 // 1000 >> 2 = 0010
>>>
Desprazamento sen signo (≥ 2.14)
-4 >>> 1 → número positivo
❓Expresións condicionais
condición ? expr1 : expr2 → Se condición é verdadeira, devolve expr1, se non, expr2.
expr1 ?? expr2 → Devolve expr1 se non é null, senón expr2.
Así, por exemplo:
String nomeUsuario(String? nome) => nome ?? 'Convidado';
🎯 Notación en cascada
Permite facer múltiples operacións sobre o mesmo obxecto sen repetir o nome: