Sobes.tech
Junior

Como é feita a comparação usando o operador identical em Dart?

sobes.tech IA

Resposta da IA

A função identical(a, b) em Dart devolve true se os seus argumentos a e b forem o mesmo objeto na memória. Caso contrário, devolve false.

Isto difere do uso do operador ==, que pode ser redefinido pelas classes para determinar igualdade lógica, em vez de identidade de objetos.

Exemplos:

// Objeto A
var list1 = [1, 2, 3];
// Objeto B (outro objeto na memória)
var list2 = [1, 2, 3];

print(identical(list1, list2)); // false (objetos diferentes)
print(list1 == list2);         // true (lógica igual se List redefinir ==)

// Objeto C, referência ao mesmo objeto que list1
var list3 = list1;

print(identical(list1, list3)); // true (apontam para o mesmo objeto)

Para tipos primitivos (números, strings, booleanos, null), que são imutáveis, o operador identical muitas vezes comporta-se como ==, pois Dart pode fazer cache ou reutilizar instâncias de valores imutáveis.

var a = 10;
var b = 10;
print(identical(a, b)); // true (provavelmente Dart usa a mesma instância para o valor 10)

var s1 = "hello";
var s2 = "hello";
print(identical(s1, s2)); // true (Dart faz cache de literais de string)

O uso principal de identical é verificar se uma referência aponta exatamente para a mesma instância de um objeto, o que é útil em otimizações, cache ou trabalho com objetos imutáveis.