gpt4 book ai didi

dart - 尝试使用 get 关键字在 dart 中执行 setter 和 getter

转载 作者:行者123 更新时间:2023-12-01 22:54:05 25 4
gpt4 key购买 nike

我正在编写这个类,并注意到可以用于小事情的匿名函数设计。

String get fullName => "$fname $lname";   //A

我开始思考是否应该以这种方式或标准来完成我的 setter 和 getter:

void setFullName( String fn, String ln ) {   //B
fname = fn;
lname = ln;
}

String getFullName(){ //C
return "$fname $lname";
}

我知道AC之间的区别在于一个是方法而另一个不是。

print(fullName);
// vs
print(getFullName());

那么,哪种方法最好。我正在阅读一个演示,其中说匿名函数实际上应该仅在函数有理由更改时才使用。我个人认为 getter 应该是传统意义上的函数,但有些事情只需速记就非常简单。

如果 getter 有一个简写,就像我写的 A 一样,那么 setter 也有简写吗?

最佳答案

Dart 中的 First 字段会自动由 getter 和 setter 包裹。如果您使用反射(镜像)来查询类的成员,您将获得 getter 和 setter,而不是字段。
这也反射(reflect)在 Dart 风格指南中:

Don't wrap fields with getters/setters just to be sure.

您可以随时将字段更改为 getter/setter,而不会破坏使用您的类的代码。

getter/setter 需要考虑的其他事项是:它们不应该进行昂贵的计算,并且不应该有副作用(除了在调用 setter 时设置支持字段)。

如果满足这些条件(并且不需要其他参数),那么使用 getter/setter 通常是个好主意。

注意:简写函数表示法不仅限于 getter/setter,而且它们也不需要它。您也可以将它用于函数,也可以为 getter/setter 提供 block 体。

bool _isSet;
bool get isSet {
return _isSet;
}
set isSet(bool value) {
if(value is null) {
throw new ArgumentError();
}
_isSet = value;
}

你可以像这样使用它们

var myClass = new MyClass();
myClass.isSet = true; // setter
print(myClass.isSet); // getter

关于dart - 尝试使用 get 关键字在 dart 中执行 setter 和 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34817143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com