diegoRodicio

Está documentación está a túa disposición sin ningún custo económico. Sen embargo, para a súa elaboración dedico moito tempo e recursos, polo que agradecería unha colaboración co que consideres oportuno. Gracias.

View Categories

➕ Operadores

📐 Precedencia e asociatividade #

A seguinte táboa mostra os operadores de Dart, ordenados por precedencia (de maior a menor):

Descrición e explicaciónOperadoresExemplo
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 : 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 #

OperadorSignificadoExemplo
+Suma3 + 25
-Resta ou signo negativo5 - 14
*Multiplicación4 * 312
/División (resultado double)7 / 23.5
~/División enteira (sen decimais)7 ~/ 23
%Resto (módulo)7 % 21

Operadores de incremento/decremento: #

OperadorSignificadoExemplo
++varIncrementa antes de usarvar a = 3; print(++a); → imprime 4
var++Usa o valor, logo incrementavar a = 3; print(a++); → imprime 3, despois a = 4
--varDecrementa antes de usarvar a = 3; print(--a); → imprime 2
var--Usa o valor, logo decrementavar 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.

OperadorSignificadoExemplo
==Igualdade5 == 5true
!=Distinto3 != 4true
>Maior que7 > 2true
<Menor que1 < 0false
>=Maior ou igual que6 >= 6true
<=Menor ou igual que2 <= 5true

🧪 Operadores de tipo #

OperadorSignificadoExemplo
asConversión de tipo (cast)obxecto as String → forza a que sexa String
isVerdadeiro se o obxecto é dese tipo"Ola" is Stringtrue
is!Verdadeiro se NON é dese tipo123 is! Stringtrue

📌 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 #

OperadorSignificadoExemplo
=Asignacióna = 5 → a vale 5
??=Asignar só se o valor actual é nullnome ??= 'Anónimo' → asigna o valor 'Anónimo' sempre que nome sexa null
+=, -=, *=, /=Combinan operación e asignacióntotal += 10 → igual a total = total + 10

🔗 Operadores lóxicos #

OperadorSignificadoExemplo 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 #

OperadorSignificadoExemplo
&AND bit a bit5 & 31 // 0101 & 0011 = 0001
|OR bit a bit5 | 27 // 0101 | 0010 = 0111
^XOR bit a bit6 ^ 35 // 0110 ^ 0011 = 0101
~Complemento bit a bit~2-3 // invirte todos os bits
<<Desprazamento á esquerda3 << 16 // 0011 << 1 = 0110
>>Desprazamento á dereita8 >> 22 // 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 #

OperadorNome e descriciónExemplo
()Chamadas a funciónssuma(3, 4) → chama á función suma con dous argumentos
[]Acceso por índice en listas ou mapasfrutas[0] → devolve o primeiro elemento da lista
?[]Acceso por índice segurofrutas?[0] → devolve o elemento só se frutas non é null
.Acceso a membros dun obxectopersoa.nome → accede á propiedade nome
?.Acceso seguro a membrospersoa?.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