📐 Precedencia e asociatividade #
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 queis
eis!
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, devolveexpr1
, se non,expr2
.expr1 ?? expr2
→ Devolveexpr1
se non é null, senónexpr2
.
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:
var pintura = Paint()
..color = Colors.black
..strokeWidth = 5.0
..strokeCap = StrokeCap.round;
Usa ?..
se o obxecto pode ser null
.
📦 Spread (coleccións) #
Usa ...
ou ...?
para desempaquetar elementos doutra colección dentro dunha literal de colección:
var lista1 = [1, 2];
var lista2 = [...lista1, 3]; // [1, 2, 3]
var lista3 = [...?lista1]; // acepta null
⚙️ Outros operadores #
Operador | Nome e descrición | Exemplo |
---|---|---|
() | Chamadas a funcións | suma(3, 4) → chama á función suma con dous argumentos |
[] | Acceso por índice en listas ou mapas | frutas[0] → devolve o primeiro elemento da lista |
?[] | Acceso por índice seguro | frutas?[0] → devolve o elemento só se frutas non é null |
. | Acceso a membros dun obxecto | persoa.nome → accede á propiedade nome |
?. | Acceso seguro a membros | persoa?.nome → accede a nome se persoa non é null |
! | Afirmación de non-nulo (cast forzado) | nome! → usa nome asumindo que non é null (lanza erro se o é) |