Что выведет код Middle Dart: классы и миксины обновлено

Dart: == без hashCode в Set

Вопрос

Что выведет программа? По строке на каждый вывод.

class User {
  final int id;
  User(this.id);
  @override
  bool operator ==(Object other) => other is User && other.id == id;
}

class Fixed {
  final int id;
  Fixed(this.id);
  @override
  bool operator ==(Object other) => other is Fixed && other.id == id;
  @override
  int get hashCode => id.hashCode;
}

void main() {
  print(User(1) == User(1));
  print({User(1), User(1)}.length);
  print({Fixed(1), Fixed(1)}.length);
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: true, 2, 1. == переопределён, поэтому прямое сравнение даёт true.

Что выведет

true
2
1

Разбор

== переопределён, поэтому прямое сравнение даёт true. Но Set ищет по hashCode, а без переопределения хеши у разных объектов разные: в множестве окажутся оба. С согласованным hashCode дубль отбрасывается.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме