Pular para o conteúdo principal

hash_and_equals

Saiba mais sobre a regra de lint hash_and_equals.

Estável
Core
Correção disponível

Sempre sobrescreva hashCode ao sobrescrever ==.

Detalhes

#

FAÇA sobrescrever hashCode ao sobrescrever ==, e prefira sobrescrever == ao sobrescrever hashCode.

Todo objeto em Dart tem um hashCode. Tanto o operador == quanto a propriedade hashCode dos objetos precisam ser consistentes para que uma implementação comum de mapa de hash funcione corretamente. Portanto, ao sobrescrever ==, o hashCode também deve ser sobrescrito para manter a consistência. Da mesma forma, se hashCode for sobrescrito, == também deve ser.

RUIM:

dart
class Bad {
  final int value;
  Bad(this.value);
​
  @override
  bool operator ==(Object other) => other is Bad && other.value == value;
}

BOM:

dart
class Better {
  final int value;
  Better(this.value);
​
  @override
  bool operator ==(Object other) =>
      other is Better &&
      other.runtimeType == runtimeType &&
      other.value == value;
​
  @override
  int get hashCode => value.hashCode;
}

Ativar

#

Para ativar a regra hash_and_equals, adicione hash_and_equals em linter > rules no seu arquivo analysis_options.yaml:

analysis_options.yaml
yaml
linter:
  rules:
    - hash_and_equals

Se você usa a sintaxe de mapa YAML para configurar as regras de lint, adicione hash_and_equals: true em linter > rules:

analysis_options.yaml
yaml
linter:
  rules:
    hash_and_equals: true

Encontrou essa página sem tradução ou que precisa de correção? Abra uma issue e nos ajude a manter esse site em PT-BR para ajudar pessoas como você.