Dart中的getter和常规方法之间的区别

时间:2020-02-16 15:21:11

标签: dart

我只是用Flutter的BLoC架构弄湿了自己。在这里,我希望创建一个Bloc类,这将帮助我转换流数据形式的用户输入。为此,假设我首先创建了一个名为Bloc的{​​{1}}类的实例,然后

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

向流中添加字符串输入

代码段:

email.streamEmail(some_string)
//Snippet 0 : w/o any `method`
class Bloc{
 final emailController = StreamController<String>();
}
//Snippet 1 : using regular 'method'
class Bloc{
 final emailController = StreamController<String>();
 void streamEmail(String value) => emailController.sink.add(value);
}

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

A tour of the Dart language

字母和设置器是特殊的方法,它们提供对对象属性的读写访问。

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

  1. 是否使用吸气剂方法导致功能增强或应用程序下降。性能?
  2. 何时和为什么我应该使用代码段2类型类定义而不是代码段1?

1 个答案:

答案 0 :(得分:1)

使用吸气剂方法导致增强功能或应用程序下降。性能?

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

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

何时使用getter / setter是有关口味的问题,与其他开发人员相比,某些开发人员更可能使用它们。我猜一般的设计目标应该是:getter / setter的行为类似于对象的常规属性,因此,除了获取/设置属性之外,不应做出任何其他未知行为。 (例如,获取对象的属性将最终将某些文件保存到文件系统中。)

在您的示例中,我将使用代码段1(可能使用不同的方法名称),因为您的示例并不是使用属性的好用例。片段2似乎是强迫使用吸气剂的明智尝试,由于吸气剂最终返回功能,最终变得有点怪异。

但是,这又是一个关于品味的问题,我敢肯定,有些开发人员会使用代码段2。