Dart 缓存函数实现的几种方式

860 阅读1分钟

单个变量缓存

优点: 方便、易理解

缺点: 每个缓存函数都需要额外维护一个*Cache变量

String _getNativeVersionCache;
String getNativeVersion() {
	_getNativeVersionCache ??= Native.getVersion();
	return _getNativeVersionCache;
}

缓存辅助函数

优点: 常用、只需暴露一个memorize函数

缺点: memorize通常需要多次重载(处理不同参数的函数)

T Function() memorize<T>(T Function() fun) {
	T cache;
	return () {
		cache ??= fun();
		return cache;
	};
}

String _getNativeVersion() {
	return Native.getVersion();
}

String getNativeVersion = memorize(_getNativeVersion);

缓存辅助对象

优点: 方便、易理解、只需暴露一个memorize对象

缺点: 不常用

Map<String, dynamic> memorize = {};
String getNativeVersion() {
	memorize['getNativeVersion'] ??= Native.getVersion();
	return memorize['getNativeVersion'];
}

总结

单个变量缓存缓存辅助函数缓存辅助对象
方便x
易理解x
易维护x
常用x