avoid_implementing_value_types
==
をオーバーライドするクラスを実装しないでください。
このルールは Dart 2.1 から利用可能です。
詳細
#しないこと ==
をオーバーライドするクラスを実装すること。
==
演算子は、契約上、同値関係である必要があります。つまり、すべてのオブジェクト o1
と o2
について、o1 == o2
と o2 == o1
は、両方とも真であるか、両方とも偽である必要があります。
注:Dart には真の値型がないため、代わりに
==
を実装するクラスを値型を識別するためのプロキシと見なします。
implements
を使用する場合、==
のメソッド本体は継承されないため、==
の契約に従うことはほぼ不可能です。==
をオーバーライドするクラスは、通常、モックやフェイクを作成することなく、テストで直接使用できます。たとえば、特定のクラス Size
の場合
dart
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;
}
BAD
dart
class CustomSize implements Size {
final int inBytes;
const CustomSize(this.inBytes);
int get inKilobytes => inBytes ~/ 1000;
}
BAD
dart
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);
});
}
GOOD
dart
class ExtendedSize extends Size {
ExtendedSize(int inBytes) : super(inBytes);
int get inKilobytes => inBytes ~/ 1000;
}
GOOD
dart
import 'package:test/test.dart';
import 'size.dart';
void main() {
test('should not throw on a size >1Kb', () {
expect(() => someFunction(Size(1001)), returnsNormally);
});
}
使用法
#avoid_implementing_value_types
ルールを有効にするには、analysis_options.yaml
ファイルの linter > rules に avoid_implementing_value_types
を追加します。
analysis_options.yaml
yaml
linter:
rules:
- avoid_implementing_value_types
特に明記されていない限り、このサイトのドキュメントは Dart 3.5.3 を反映しています。ページ最終更新日: 2024-07-03 ソースを表示または 問題を報告。