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}");
}