目录

Effective Dart

在过去的几年里,我们编写了大量的 Dart 代码,并了解了很多哪些方法有效,哪些方法无效。我们与您分享这些,以便您也可以编写一致、健壮、快速的代码。这里有两个主要的主题

  1. 保持一致性。 当涉及到格式化和大小写等问题时,关于哪个更好的争论是主观的,并且不可能解决。我们所知道的是,一致是客观上有帮助的。

    如果两段代码看起来不同,那应该是它们在某种有意义的方式上不同。当一段代码突出并引起您的注意时,它应该出于有用的原因这样做。

  2. 保持简洁。 Dart 被设计为熟悉的,因此它继承了许多与 C、Java、JavaScript 和其他语言相同的语句和表达式。但我们创建 Dart 是因为这些语言提供的还有很大的改进空间。我们添加了一系列功能,从字符串插值到初始化形式参数,以帮助您更简单、更容易地表达您的意图。

    如果有多种方式来表达某件事,您通常应该选择最简洁的一种。这并不是说您应该代码高尔夫将整个程序塞进一行。目标是代码经济,而不是密集

指南

#

为了便于理解,我们将指南分成几个独立的页面

  • 样式指南 – 这定义了布局和组织代码的规则,或者至少是 dart format 没有为您处理的部分。样式指南还指定了标识符的格式:camelCaseusing_underscores 等。

  • 文档指南 – 这告诉您关于注释中内容的所有知识。包括文档注释和常规的代码注释。

  • 用法指南 – 这教您如何最好地利用语言特性来实现行为。如果它在语句或表达式中,则此处涵盖。

  • 设计指南 – 这是最灵活的指南,但范围最广。它涵盖了我们从为库设计一致、可用的 API 中学到的知识。如果它在类型签名或声明中,则此指南会涵盖它。

有关所有指南的链接,请参阅摘要

如何阅读指南

#

每个指南都分为几个部分。部分包含一个指南列表。每个指南都以以下单词之一开头

  • DO 指南描述了应该始终遵循的实践。几乎永远不会有偏离它们的有效理由。

  • DON'T 指南与此相反:几乎永远不是好主意的事情。希望我们没有其他语言那么多,因为我们的历史包袱较少。

  • PREFER 指南是您应该遵循的实践。但是,在某些情况下,这样做可能是有意义的。只是要确保您在忽略指南时理解其全部含义。

  • AVOID 指南与“prefer”相反:您不应该做的事情,但在极少数情况下可能有充分的理由这样做。

  • CONSIDER 指南是您可能想要或可能不想遵循的实践,具体取决于具体情况、先例和您自己的偏好。

一些指南描述了 例外,其中规则不适用。列出时,例外情况可能并不详尽——您可能仍然需要在其他情况下使用自己的判断。

这听起来像是如果您没有正确系好鞋带,警察就会破门而入。事情没那么糟糕。这里的大部分指南都是常识,我们都是理性的人。一如既往,目标是编写出漂亮、可读且易于维护的代码。

Dart 分析器提供了一个 linter,以帮助您编写符合这些和其他指南的良好、一致的代码。如果存在一个或多个可以帮助您遵循指南的linter 规则,则该指南会链接到这些规则。链接使用以下格式

Linter 规则:unnecessary_getters_setters

要了解如何使用 linter,请参阅启用 linter 规则linter 规则列表。

术语表

#

为了保持指南的简洁,我们使用了一些速记术语来指代不同的 Dart 构造。

  • 库成员 是顶级字段、getter、setter 或函数。基本上,任何位于顶层而不是类型的东西。

  • 类成员 是在类内部声明的构造函数、字段、getter、setter、函数或运算符。类成员可以是实例或静态的,抽象的或具体的。

  • 成员 是库成员或类成员。

  • 变量 在一般使用时,指的是顶级变量、参数和局部变量。它不包括静态或实例字段。

  • 类型 是任何命名的类型声明:类、类型定义或枚举。

  • 属性 是顶级变量、getter(在类内部或在顶层,实例或静态)、setter(相同)或字段(实例或静态)。大致上,任何“类似字段”的命名构造。

所有规则的摘要

#

用法

#

Null

字符串

集合

函数

变量

成员

构造函数

错误处理

异步

设计

#

名称

类和混入

构造函数

成员

类型

参数

相等