📐 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?.nomeUnarios prefix . Aplican unha operación antes de avaliar a expresión.-expr, !expr, ~expr, ++expr, --expr, await-x, !condición, await tarefaMultiplicativos . Multiplicación, división, módulo e división enteira.*, /, %, ~/6 * 3, 10 ~/ 3Aditivos . Suma ou resta de valores.+, -a + b, x - yDesprazamento . Despraza bits á esquerda ou dereita.<<, >>, >>>n << 1, n >> 2Bit a bit AND . Compara os bits e devolve 1 só cando ambos son 1.&5 & 3Bit a bit XOR . Compara bits: devolve 1 só se son diferentes.^5 ^ 3Bit a bit OR . Compara bits: devolve 1 se algún dos dous é 1.|5 | 2Relacionais e de tipo . Comparacións ou comprobación de tipo.>=, >, <=, <, as, is, is!x is int, nota >= 5Igualdade . Comproba se dous valores son iguais ou distintos.==, !=a == b, nome != nullLóxico AND . Verdade só se ambas condicións son verdadeiras.&&x > 0 && x < 10Lóxico OR . Verdade se algunha das condicións é verdadeira.||x == 0 || y == 0Valor 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 : expr2x > 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 ++varIncrementa antes de usar var a = 3; print(++a); → imprime 4var++Usa o valor, logo incrementa var a = 3; print(a++); → imprime 3, despois a = 4--varDecrementa antes de usar var a = 3; print(--a); → imprime 2var--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 asConversión de tipo (cast) obxecto as String → forza a que sexa StringisVerdadeiro se o obxecto é dese tipo "Ola" is String → trueis!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 !exprNegació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:
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 é)
Exemplos #
🔗 Ver o código en DartPad