笔记:
1. dart, List的方法:
var l = [1, 2, 3, "some times, ok", 4, 5];
add(), length, isEmpty, isNotEmpty, first, last, clear()
l.sublist(1,3), // 前开后闭。[...)
l.shuffle(),
l.reversed.toList(),
Map<int, int> map = l.asMap(); // 返回 Map
var numbers = l.whereType<int>(); // 只选取 int 类型的值
l.getRange(1, 3), // 前开后闭。[...)
l.replaceRange(2, 4, [9, 8]); // 替换,更新某些值
l.firstWhere((i) => i ==2) // 查找
l.singleWhere((i) => i ==2) // 查找 不建议使用
l.followedBy([22, 33]).toList(); // 在结尾添加追加列表
print(l.any((e) => e == 3)); // 任意一个元素是否满足某个条件, bool
print(l.every((e) => e == 3)); // 所有元素是否满足某个条件, bool
l.take(3).toList() 截取前3个并返回一个迭代器
l.skip(3).toList() 跳过前3个并返回一个迭代器
// fold(), 这里的5,是初始值, 相当于是再在列表的头部添加一个元素5,
// i+j, 指的是所有的相邻2个元素进行累加,也可以是 减,乘,除
l.fold(5, (i, j) => i + j)
// reduce(), 与fold() 类似,只是没有初始值
l.reduce((i, j) => i *j);
11. dart 中 "then", 表示一个异步的结果出来之后,拿这个值去做另一件事:
void main() {
Future.delayed(
const Duration(seconds: 3),
() => 100,
).then((value) {
print("the value is: $value");
});
print("Waiting for a value");
}
// Waiting for a value
// the value is: 100
12. dart 中 "_", 下划线开头的变量,表示是私有的,仅在当前类中显示
13. dart, 根据传入的不同参数,一个类可以声明多个构造器,
// 普通构造器
Order(this._id, this._reference, this._date);
// 命名构造器, 可以添加更多的可选选项
Order.withDiscount(this._id, this._reference, {this.code}) {
_date = new DateTime.now();
}
14. 每次使用一个类的实例,实际上是在调用这个类的构造器。
构造器的目的在于,确保实例具有 一致性,连贯性的状态。
15. 下面这个叫做 初始化器, initializer,接受一个冒号及其后面的语句。
class Robot {
double height;
Robot(height) : this.height = height, assert(height > 4.2);
// Robot(this.height); 这种写法其实是一种简写。
// 上面的写法可以使用 assert 语句。
}
16. 构造器的{构造体}里面可以作为setter使用,但是不能返回任何值。
17. 所有的命名参数默认都是可选参数,但是可以加上 @required,表示必须。
Robot({ this.height, @required this.weight, this.names });
// 也可以提供默认值
Robot({ this.height = 7, this.weight = 100, this.names = const [] });
18. 命名构造器, 一个类可以有多个构造器:
- 使用命名构造器, 必须先提供一个普通的构造器
- 命名构造器,我觉得是可以拥有更多的自定义空间
- 也可以写一个私有的构造器 "_" : Robot._(this.name);
19. 工厂构造器可以返回一些值,而且工厂构造器:
- 控制缓存,返回一些创建昂贵的对象
- 可以返回其他的实例,子类
20. Singletons,单例模式: 即工厂构造器只返回当前类的实例
如果多次调用一个实例化一个类的话,单例模式可以确保指向的是同一个对象。
21. identical(r1, r2),判断2个引用,是否指向同一个对象。
网友评论