Dart中关于class成员的封装和类型注解有哪些约定?

What are the conventions in Dart about class members' encapsulation and type annotations?

我是 Dart 语言的新手。所以我想知道更多关于程序员在使用这种语言进行开发时遵循的一些约定。

  1. 我是否应该始终像我一样封装我的 class 成员,例如在 Java 中?每当我创建 属性 of class 时,我是否应该将其设为私有并提供 getters/setters?或者有些情况我应该离开他们public?如果是这样,这些情况的例子是什么?

  2. 在我看来,String、int 等类型注释增加了代码的可读性。它们作为 reading/using 我的代码的其他开发人员的文档。程序员现在不应该考虑这个变量中存储的是什么类型的值。那么再说一次,在什么情况下,声明变量时需要使用 var 关键字?

德米特里。

谢谢。

感谢您查看 Dart!

无需封装class字段。 Dart 为您创建隐式 getter 和 setter。如果您需要为该字段实际计算一些内容,则可以手动实现 getter 或 setter。奖励:这不会破坏 API.

的消费者

示例:

class Person {
  int age;
}

稍后,您要计算年龄:

class Person {
  DateTime birthdate;

  int get age => new DateTime.now().difference(birthdate).inDays ~/ 365;
}

在这两种情况下,您都可以这样做:

print(person.age);

很酷! API 没有变化,也没有防御性 getter 和 setter(需要时添加)。

您应该为代码的 "surface area" 使用类型注释。例如,对方法和函数签名使用类型注释。对于变量类型非常明显的情况,您应该考虑使用 var,因为它更简洁和可读。

例如:

String doCoolStuff(int bar) {
  var clearlyABool = true;
  return 'Hello world';
}

注意 return 类型和 bar 参数是类型注释的,但是 clearlyABool 使用 var 因为我们用 bool 初始化。

随意在任何地方使用类型注释,这是程序员的选择。轶事:dart2js 源代码几乎到处都使用类型注释。