gpt4 book ai didi

flutter - 为什么我应该避免在 getter 和 setter 中包装字段?

转载 作者:行者123 更新时间:2023-12-03 02:49:39 25 4
gpt4 key购买 nike

我正在构建一个 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; }
}

但是 Dart linter 提示我应该“避免将字段包装在 getter 和 setter 中以确保安全”。但是,这对我来说没有多大意义。现在 setter/getter 没用,但是如果将来我需要在从外部访问变量之前进行某种处理怎么办?我所要做的就是更新 setter/getter 。但是,如果属性是公开的并且可以直接访问,那么如果某些业务规则发生更改,我将不得不更新整个代码库。

那么这个警告有什么意义呢?或者,换句话说,为什么创建“无用的 setter/getter ”会是一种不好的做法?

最佳答案

However, if the properties were public and being accessed directly, I would have to update the whole codebase if some business rule changed.


问问自己这个问题:如果您必须更改公共(public)成员以使用显式 getter 和 setter,您究竟需要在 Dart 代码库中进行哪些更改?
在大多数语言中,getter 和 setter 看起来像是对消费者的方法调用。如果您想用公共(public) getter 和 setter 替换公共(public)数据成员,那将是一个破坏性的 API 更改,需要更改使用它的所有内容。
Dart 不是这样的。 Getter 和 setter 看起来不像对消费者的方法调用;它们与直接成员访问没有区别。 (拥有一个公共(public)数据成员隐式声明了相应的 getter 和 setter 作为类接口(interface)的一部分。)将公共(public)数据成员更改为公共(public) getter 和 setter 不需要对调用者进行任何更改,因此围绕私有(private)成员变量提供简单的 getter 和 setter没有任何好处。
(您遇到的 unnecessary_getters_setters lint 的文档也解释了这一点。)
顺便说一句, unnecessary_getters_setters仅当您同时提供 getter 和 setter 时才会发生 lint(这不是您的示例代码所做的)。如果您只提供一个,那么它将不再等同于公共(public)数据成员。

关于flutter - 为什么我应该避免在 getter 和 setter 中包装字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61720221/

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