Что выведет код 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 ошибок.
Предыдущий вопрос
Dart: ключевое слово on у миксина
Следующий вопрос
Dart: расширение и статический тип