メインコンテンツにスキップ

hash_and_equals

安定版
コア
修正が利用可能です

== をオーバーライドする場合は、必ず hashCode もオーバーライドしてください。

詳細

#

== をオーバーライドする場合は 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

代わりに YAML マップ構文を使用してリンタールールを設定している場合は、linter > rules の下に hash_and_equals: true を追加してください。

analysis_options.yaml
yaml
linter:
  rules:
    hash_and_equals: true