avoid_ implementing_ value_ types
Saiba mais sobre a regra de lint avoid_implementing_value_types.
Não implemente classes que sobrescrevem ==.
Detalhes
#NÃO FAÇA implementar classes que sobrescrevem ==.
O operador == é contratualmente obrigado a ser uma relação de equivalência; ou
seja, para todos os objetos o1 e o2, de forma simétrica,
o1 == o2 e
o2 == o1 devem ser ambos verdadeiros ou ambos falsos.
NOTA: O Dart não tem value types verdadeiros, então consideramos uma classe que implementa
==como um proxy para identificar value types.
Ao usar implements, você não herda o corpo do método ==, o que torna quase
impossível seguir o contrato de ==. Classes que sobrescrevem ==
normalmente
podem ser usadas diretamente em testes sem criar mocks ou fakes. Por exemplo,
para uma classe Size:
class Size {
final int inBytes;
const Size(this.inBytes);
@override
bool operator ==(Object other) => other is Size && other.inBytes == inBytes;
@override
int get hashCode => inBytes.hashCode;
}
RUIM:
class CustomSize implements Size {
final int inBytes;
const CustomSize(this.inBytes);
int get inKilobytes => inBytes ~/ 1000;
}
RUIM:
import 'package:test/test.dart';
import 'size.dart';
class FakeSize implements Size {
int inBytes = 0;
}
void main() {
test('should not throw on a size >1Kb', () {
expect(() => someFunction(FakeSize()..inBytes = 1001), returnsNormally);
});
}
BOM:
class ExtendedSize extends Size {
ExtendedSize(int inBytes) : super(inBytes);
int get inKilobytes => inBytes ~/ 1000;
}
BOM:
import 'package:test/test.dart';
import 'size.dart';
void main() {
test('should not throw on a size >1Kb', () {
expect(() => someFunction(Size(1001)), returnsNormally);
});
}
Ativar
#
Para ativar a regra avoid_implementing_value_types, adicione avoid_implementing_value_types
em
linter > rules no seu arquivo analysis_options.yaml:
linter:
rules:
- avoid_implementing_value_types
Se você usa a sintaxe de mapa YAML para configurar as regras de lint,
adicione avoid_implementing_value_types: true em linter > rules:
linter:
rules:
avoid_implementing_value_types: true
Salvo indicação em contrário, a documentação neste site reflete Dart 3.13.7. Relatar um problema.
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ê.