目次

hash_and_equals

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

このルールは、Dart 2.0から利用可能です。

ルールセット:コア推奨Flutter

このルールにはクイックフィックスが用意されています。

詳細

#

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