Dart 的 Get Set:从基础定义到业务实战,一文读懂
引言
嘿,编程小伙伴们!在 Dart 的编程天地里,get 和 set 就像两把神奇的钥匙,为我们打开了数据访问与封装的新大门。get 和 set 允许我们以更优雅、更安全的方式来访问和修改类中的数据。无论是编程新手渴望构建基础扎实的代码,还是经验丰富的开发者追求更简洁高效的实现,掌握 get 和 set 都是提升编程能力的关键一步。接下来,让我们一同探索 Dart 中 get 和 set 的奥秘。
定义、使用 get set
定义
在 Dart 中,通过在类里定义 get 和 set 方法,可以控制对类中成员变量的访问。
class People {
String? _name;
People();
set name(String value) {
_name = value;
}
String get name {
return 'people is $_name';
}
}
这里,People 类有一个私有的成员变量 _name 。set name 方法用于设置 _name 的值,get name 方法用于获取 _name 的值,并在返回时添加了前缀 people is 。这种方式隐藏了成员变量的直接访问,提供了数据封装。
使用
创建类的实例并使用 get 和 set 方法。
var p = People();
p.name = 'ducafecat';
print(p.name);
首先,通过 p.name = 'ducafecat'; 使用 set 方法设置 name 的值为 ducafecat 。然后,通过 print(p.name); 使用 get 方法获取并打印 name 的值,输出为 people is ducafecat 。
简化 get set
在 Dart 中,还可以使用箭头函数来简化 get 和 set 方法的定义。
class People {
String? _name;
People();
set name(String value) => _name = value;
String get name => 'people is $_name';
}
这样的简化语法使代码更加简洁明了,功能与之前的定义是一样的。set name 使用箭头函数直接将传入的值赋给 _name ,get name 使用箭头函数返回带有特定前缀的 _name 值。
业务场景 - 购物车
在实际业务场景中,get 方法常用于计算和返回一些业务相关的值。
/// 商品数量
int get lineItemsCount => lineItems.length;
/// 运费
double get shipping => 0;
/// 折扣
double get discount =>
lineCoupons.fold<double>(0, (double previousValue, CouponsModel element) {
return previousValue + (double.parse(element.amount?? "0"));
});
/// 商品合计价格
double get totalItemsPrice =>
lineItems.fold<double>(0, (double previousValue, LineItem element) {
return previousValue + double.parse(element.total?? "0");
});
这里定义了几个 get 方法来获取购物车相关的信息。lineItemsCount 返回购物车中商品的数量,shipping 返回运费(这里固定为 0 ),discount 通过对优惠券列表进行折叠操作计算总折扣,totalItemsPrice 通过对商品列表进行折叠操作计算商品的合计价格。在以前,我们可能会定义 getXXX() 这样的方法来实现同样的功能,而现在使用 get 方法使代码更加简洁直观,并且同样适用于赋值操作(虽然这里主要展示的是获取值的操作)。
实战总结
在实际编程中,get 和 set 方法极大地增强了代码的可读性和可维护性。通过封装数据的访问和修改逻辑,我们可以更好地控制数据的一致性和安全性。在业务场景如购物车功能的实现中,get 方法简洁地提供了关键业务数据的计算和获取方式。同时,简化的 get 和 set 语法让代码更加紧凑,提高了编程效率。
结论
掌握 Dart 中的 get 和 set 是提升编程技能的重要一环。无论是简单的数据访问控制,还是复杂的业务逻辑计算,get 和 set 都能发挥重要作用。希望通过本文的介绍,大家对 get 和 set 在 Dart 中的应用有了更深入的理解,在今后的编程实践中能够灵活运用,编写出更加优雅、高效的代码。
扫码关注我们!

