我正在构建一个 Flutter 应用程序。我有一个看起来像这样的课程:
class ToDo {
String _title;
bool _done;
String get title => _title;
void set title(String newTitle) { _title = newTitle; }
bool get _done => _done
void set done(bool done) { _done = done; }
}
Run Code Online (Sandbox Code Playgroud)
但是 Dart linter 抱怨我应该“为了安全起见,避免在 getter 和 setter 中包装字段”。然而,这对我来说没有多大意义。现在 getter 没有用,但是如果将来我需要在从外部访问变量之前进行某种处理怎么办?我所要做的就是更新吸气剂。但是,如果属性是公开的并且可以直接访问,那么如果某些业务规则发生变化,我将不得不更新整个代码库。
那么这个警告有什么意义呢?或者,换句话说,为什么创建“无用的吸气剂”是一种不好的做法?
jam*_*lin 17
但是,如果属性是公开的并且可以直接访问,那么如果某些业务规则发生变化,我将不得不更新整个代码库。
问问自己:如果您必须将公共成员更改为显式 getter 和 setter,您究竟需要在 Dart 代码库中更改哪些内容?
在大多数语言中,getter 和 setter 看起来像是对消费者的方法调用。如果您想用公共 getter 和 setter 替换公共数据成员,那将是一个破坏性的 API 更改,需要对使用它的所有内容进行更改。
Dart 不是这样的。getter和setter方法都没有像方法调用给消费者; 它们与直接成员访问没有区别。(拥有一个公共数据成员隐式声明了相应的 getter 和 setter 作为类接口的一部分。)将公共数据成员更改为公共 getter 和 setter 不需要对调用者进行任何更改,因此在私有成员周围提供简单的 getter 和 setter变量没有任何好处。
(您遇到的unnecessary_getters_setterslint的文档也对此进行了解释。)
顺便说一句,仅当您同时提供 getter和setter(这不是您的示例代码所做的)unnecessary_getters_setters时,才会发生 lint 。如果您只提供一个,那么它就不再等同于公共数据成员。
| 归档时间: |
|
| 查看次数: |
5100 次 |
| 最近记录: |