getter 和 Dart 中的常规方法之间的区别
Difference between getter and a regular method in Dart
我刚刚接触 Flutter 的 BLoC 架构。在这里,我希望创建一个Bloc
class,这将帮助我将用户输入转换为流数据的形式。为了完成这个任务,假设首先我创建了一个 Bloc
class 的实例,名称为 email
然后,
- 利用片段 0,然后调用
email.emailController.sink.add(some_string)
- 或者,使用代码段 1,然后调用
email.streamEmail(some_string)
- 或者,使用代码段 2,然后调用
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);
}
//Snippet 2 : using 'get' based 'method'
class Bloc{
final emailController = StreamController<String>();
Function(String) get streamEmail => emailController.sink.add;
}
我了解到,就代码可读性而言,使用代码片段 1 或 2 是一种更好的方法。
我知道片段 1 和 2 只是做同一件事的两种不同方式。但是,我不清楚片段 2 通过使用 getter 方法带来的差异。
来自 A tour of the Dart language,
Getters and setters are special methods that provide read and write access to an object’s properties.
目前,我对 getter 的唯一理解是它们代表了一种在 class 中定义方法的替代方法。所以,准确地说,我的问题是:
- 使用 getter 方法是否会导致增强或应用内掉线。性能?
- 何时以及为什么我应该使用代码段 2 类型 class 定义而不是代码段 1?
Does usage of a getter method lead enhancement or drop in app. performance?
不,使用 getter/setter 而不是方法不会影响性能。
When & why should I be using snippet 2 type class definitions instead of snippet 1?
何时使用 getters/setters 是一个关于品味的问题,一些开发人员比其他开发人员更可能使用它们。我想一般的设计目标应该是 getters/setters 像对象的正常属性一样工作,因此不应该比 getting/setting 和 属性 产生任何额外的未知行为。 (例如,获取一个对象的 属性 最终会将一些文件保存到文件系统)。
在您的示例中,我将使用代码段 1(可能使用不同的方法名称),因为您的示例并不是使用属性的真正好用例。 Snippet 2 似乎是一个强制使用 getter 的巧妙尝试,最终变得有点奇怪,因为 getter 最终返回了一个函数。
但同样,这是一个关于品味的问题,我相信有一些开发人员会选择代码片段 2。
我刚刚接触 Flutter 的 BLoC 架构。在这里,我希望创建一个Bloc
class,这将帮助我将用户输入转换为流数据的形式。为了完成这个任务,假设首先我创建了一个 Bloc
class 的实例,名称为 email
然后,
- 利用片段 0,然后调用
email.emailController.sink.add(some_string)
- 或者,使用代码段 1,然后调用
email.streamEmail(some_string)
- 或者,使用代码段 2,然后调用
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);
}
//Snippet 2 : using 'get' based 'method'
class Bloc{
final emailController = StreamController<String>();
Function(String) get streamEmail => emailController.sink.add;
}
我了解到,就代码可读性而言,使用代码片段 1 或 2 是一种更好的方法。 我知道片段 1 和 2 只是做同一件事的两种不同方式。但是,我不清楚片段 2 通过使用 getter 方法带来的差异。
来自 A tour of the Dart language,
Getters and setters are special methods that provide read and write access to an object’s properties.
目前,我对 getter 的唯一理解是它们代表了一种在 class 中定义方法的替代方法。所以,准确地说,我的问题是:
- 使用 getter 方法是否会导致增强或应用内掉线。性能?
- 何时以及为什么我应该使用代码段 2 类型 class 定义而不是代码段 1?
Does usage of a getter method lead enhancement or drop in app. performance?
不,使用 getter/setter 而不是方法不会影响性能。
When & why should I be using snippet 2 type class definitions instead of snippet 1?
何时使用 getters/setters 是一个关于品味的问题,一些开发人员比其他开发人员更可能使用它们。我想一般的设计目标应该是 getters/setters 像对象的正常属性一样工作,因此不应该比 getting/setting 和 属性 产生任何额外的未知行为。 (例如,获取一个对象的 属性 最终会将一些文件保存到文件系统)。
在您的示例中,我将使用代码段 1(可能使用不同的方法名称),因为您的示例并不是使用属性的真正好用例。 Snippet 2 似乎是一个强制使用 getter 的巧妙尝试,最终变得有点奇怪,因为 getter 最终返回了一个函数。
但同样,这是一个关于品味的问题,我相信有一些开发人员会选择代码片段 2。