hash_and_equals
==
をオーバーライドする場合は、常にhashCode
もオーバーライドしてください。
このルールは、Dart 2.0から利用可能です。
このルールにはクイックフィックスが用意されています。
詳細
#必ず==
をオーバーライドする場合はhashCode
もオーバーライドし、hashCode
をオーバーライドする場合は==
もオーバーライドすることを推奨します。
DartのすべてのオブジェクトにはhashCode
があります。一般的なハッシュマップの実装が正しく機能するためには、オブジェクトの==
演算子とhashCode
プロパティの両方が整合している必要があります。したがって、==
をオーバーライドする場合は、整合性を維持するためにhashCode
もオーバーライドする必要があります。同様に、hashCode
をオーバーライドする場合は、==
もオーバーライドする必要があります。
悪い例
dart
class Bad {
final int value;
Bad(this.value);
@override
bool operator ==(Object other) => other is Bad && other.value == value;
}
良い例
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;
}
使用方法
#hash_and_equals
ルールを有効にするには、analysis_options.yaml
ファイルのlinter > rulesの下にhash_and_equals
を追加します。
analysis_options.yaml
YAML
linter:
rules:
- hash_and_equals
特に明記されていない限り、このサイトのドキュメントはDart 3.5.3を反映しています。最終更新日:2024年7月3日。 ソースを表示 または 問題を報告する.