Dart 中 getter 和常规方法的区别

Arg*_*gon 7 getter-setter dart flutter

我刚刚接触 Flutter 的 BLoC 架构。在这里,我想创建一个Bloc类,它将帮助我以流数据的形式转换用户输入。为了完成这项任务,假设首先我创建了一个Bloc具有名称的类的实例,email然后,

  1. 使用片段 0 然后调用 email.emailController.sink.add(some_string)
  2. 或者,使用片段 1 然后调用 email.streamEmail(some_string)
  3. 或者,使用片段 2 代码,然后调用 email.streamEmail(some_string)

向流中添加字符串输入

代码片段:

//Snippet 0 : w/o any `method`
class Bloc{
 final emailController = StreamController<String>();
}
Run Code Online (Sandbox Code Playgroud)
//Snippet 1 : using regular 'method'
class Bloc{
 final emailController = StreamController<String>();
 void streamEmail(String value) => emailController.sink.add(value);
}
Run Code Online (Sandbox Code Playgroud)
//Snippet 2 : using 'get' based 'method'
class Bloc{
 final emailController = StreamController<String>();
 Function(String) get streamEmail => emailController.sink.add;
}
Run Code Online (Sandbox Code Playgroud)

我了解到,在代码可读性方面,使用代码段 1 或 2 是一种更好的方法。我知道代码段 1 和 2 只是做同一件事的两种不同方式。但是,我不清楚代码段 2 通过使用 getter 方法带来的差异。

Dart 语言之旅

Getter 和 setter 是提供对对象属性的读写访问的特殊方法。

目前,我对 getter 的唯一理解是它们代表了在类中定义方法的另一种方法。所以,准确地说,我的问题是:

  1. 使用 getter 方法是否会导致增强或删除应用程序。表现?
  2. 何时以及为什么我应该使用代码段 2 类型的类定义而不是代码段 1?

jul*_*101 6

getter 方法的使用是否会导致应用程序的增强或下降。表现?

不,使用 getter/setter 代替方法不会影响性能。

何时以及为什么我应该使用代码段 2 类型的类定义而不是代码段 1?

何时使用 getter/setter 是一个关于品味的问题,一些开发人员比其他开发人员更有可能使用它们。我猜一般的设计目标应该是 getter/setter 像对象上的普通属性一样,因此除了获取/设置属性之外,不应该做出任何额外的未知行为。(例如,获取对象的属性最终会将一些文件保存到文件系统)。

在您的示例中,我将使用代码段 1(并且可能使用不同的方法名称),因为您的示例并不是使用属性的好用例。Snippet 2 似乎是强制使用 getter 的巧妙尝试,但最终有点奇怪,因为 getter 最终返回了一个函数。

但同样,这是一个关于品味的问题,我相信有一些开发人员会使用代码段 2。