对于常量来说,Chris Buckett's answer是很棒的.
显然,有一个三元运算符可以在Member中工作
初始化器.因此,如果一个字段的初始化代价很高(比方说
需要函数调用和/或创建对象),此方法似乎有效:
- 不必费心初始化类中的成员-更喜欢
构造函数.否则,可能会白费力气.
- 跳过NICE this.member参数语法.而是使用成员名称和
使分配中具有this.个成员的成员获得资格.
- Make use of the ?parm with ternary operator in member initializer. Here is an example in which creating the default values for the member is assumed expensive.
class Formats {
static Map<String, dynamic> defaultFormats() {
print("Expensive call - avoid if possible");
return {"th": 'default th', "td": 'default td'};
}
Map<String, dynamic> leftTbl;
Map<String, dynamic> rightTbl;
Formats(
{Map<String, dynamic>? leftTbl,
Map<String, dynamic>? rightTbl})
: leftTbl = leftTbl ?? defaultFormats(),
rightTbl = rightTbl ?? defaultFormats();
@override
String toString() {
return """
l => $leftTbl,
r => $rightTbl
""";
}
}
示例用法:
print(new Formats());
print(new Formats(leftTbl: {"th":'solid #089', "td":'solid #089' }));
print(new Formats(leftTbl: {"th":'solid #189', "td":'solid #189'},
rightTbl: {"th":'solid #189', "td":'solid #189'}));
输出:
Expensive call - avoid if possible
Expensive call - avoid if possible
l => {th: default th, td: default td},
r => {th: default th, td: default td}
Expensive call - avoid if possible
l => {th: solid #089, td: solid #089},
r => {th: default th, td: default td}
l => {th: solid #189, td: solid #189},
r => {th: solid #189, td: solid #189}