Dart 中的普通方法和 setter 方法有什么区别?
What's the difference between a normal method and a setter method in Dart?
我昨天刚开始学习 Dart。我想知道 Dart 中的普通方法和 setter 方法有什么区别?比如我有下面的演示代码
class Person {
String? firstName;
String? lastName;
// Normal method
fullName(String? name) {
var names = name!.split(' ');
this.firstName = names[0];
this.lastName = names[1];
}
}
main() {
Person p = Person();
p.fullName('John Smith');
print("${p.firstName} ${p.lastName}");
}
并且:
class Person {
String? firstName;
String? lastName;
// Setter
set fullName(String? name) {
var names = name!.split(' ');
this.firstName = names[0];
this.lastName = names[1];
}
}
main() {
Person p = Person();
p.fullName = 'John Smith';
print("${p.firstName} ${p.lastName}");
}
区别似乎只是调用语法。除此之外,还有什么不同吗?
主要归结为惯例。
通常,如果没有 getter,您不会想要 setter。 (尽管没有 setter 的 getter 很好......而且很常见。)
在您的情况下,我会使用 setter – 然后只需添加 getter!
(尽管我会在 setter 中添加更多检查以确保没有人通过 "A string with more spaces!"
)。
使用 setter,您不需要括号即可将值作为参数传递。相反,您将使用等号。 setter 的另一件事是 getter 的 return 类型应该与 setter 的参数类型相同。
class User{
late _age;
get age(){
return _age;
}
set age(int age){
_age = age;
}
}
void main(){
var user = User();
user.age = 4;
print("age is ${user.age}");
}
我昨天刚开始学习 Dart。我想知道 Dart 中的普通方法和 setter 方法有什么区别?比如我有下面的演示代码
class Person {
String? firstName;
String? lastName;
// Normal method
fullName(String? name) {
var names = name!.split(' ');
this.firstName = names[0];
this.lastName = names[1];
}
}
main() {
Person p = Person();
p.fullName('John Smith');
print("${p.firstName} ${p.lastName}");
}
并且:
class Person {
String? firstName;
String? lastName;
// Setter
set fullName(String? name) {
var names = name!.split(' ');
this.firstName = names[0];
this.lastName = names[1];
}
}
main() {
Person p = Person();
p.fullName = 'John Smith';
print("${p.firstName} ${p.lastName}");
}
区别似乎只是调用语法。除此之外,还有什么不同吗?
主要归结为惯例。
通常,如果没有 getter,您不会想要 setter。 (尽管没有 setter 的 getter 很好......而且很常见。)
在您的情况下,我会使用 setter – 然后只需添加 getter!
(尽管我会在 setter 中添加更多检查以确保没有人通过 "A string with more spaces!"
)。
使用 setter,您不需要括号即可将值作为参数传递。相反,您将使用等号。 setter 的另一件事是 getter 的 return 类型应该与 setter 的参数类型相同。
class User{
late _age;
get age(){
return _age;
}
set age(int age){
_age = age;
}
}
void main(){
var user = User();
user.age = 4;
print("age is ${user.age}");
}