颤振均衡在现实生活中的使用?



我已经了解了什么是Equatable以及如何使用它。但我想知道我为什么要用它?

我已经找到了一些原因。其中之一,当我们想要比较来自任何类的两个或多个相同对象时,它将使用。由于哈希码的原因,即使它们的属性相同,它们也不相同。但是equatable在没有哈希码的情况下进行比较。

但是我真的很想知道我将在现实生活中使用的场景?

多谢. .

概述部分描述得很好

默认情况下,如果两个对象是相同的实例,==返回true。

class Bar {
final int a = 2;
}
print(Bar() == Bar()); //false

当你喜欢通过字段来判断实例/对象时,我们可以使用Equatable。当我们想要更新状态(Check Bloc state-management)时的一个常见用例

class Foo extends Equatable {
final int a = 2;
@override
List<Object?> get props => [a];
}
print(Foo() == Foo()); //true

默认情况下,2个引用对象通过引用进行比较,这意味着如果您将创建两个相等的对象并尝试比较它们将是不同的,因为引用是不同的,并且您必须手动检查每个字段与另一个对象的每个字段。有关equalshasCode概念的详细信息,请参阅此处。

因此,如果对象没有特定的equalshashCode,则不能在SetMapHashTables等数据结构中使用这些对象。

另一个真实的例子是单元测试。对于您来说,编写必须比较实际结果和预期结果的测试将是非常累人的,因为在每个测试中,您必须比较每个字段,而不仅仅是使用equivalency操作符(==)。

请记住,这不是dart功能,这是标准计算机科学中的方法数据结构.

让我们假设我们有这个user类模型:

class User extends Equatable {
final String fullName;
final int phone;
const User({
required this.fullName,
required this.phone,
});
@override
List<Object?> get props => [fullName, phone];
}

我们有这些变量:

var myUser = User(fullName: 'Amir', phone: 123456);
List<User> users = [
User(fullName: 'Amir', phone: 123456),
User(fullName: 'Amir 2', phone: 5353453),
User(fullName: 'Amir 3', phone: 78978978),
];

,现在我们要搜索users,如果myUser在用户列表中,删除它:

users.remove(myUser);

如果我们不在User上使用Equatable,我们可以找到它。但是现在我们可以了。

最新更新