Dart 概述
Dart 是一种针对客户端优化的语言,用于在任何平台上开发快速应用。 其目标是提供用于多平台开发的最高效的编程语言,并配备用于应用框架的 灵活的执行运行时平台 。
语言由其 技术范围 定义——开发过程中做出的选择,这些选择塑造了语言的功能和优势。 Dart 的设计目标是特别适合客户端开发的技术范围,优先考虑开发(亚秒级状态热重载)和跨各种编译目标(Web、移动和桌面)的高质量生产体验。
Dart 也是 Flutter 的基础。 Dart 提供了为 Flutter 应用提供支持的语言和运行时,但 Dart 还支持许多核心开发任务,例如代码格式化、分析和测试。
Dart:语言
#Dart 语言是类型安全的; 它使用静态类型检查来确保变量的值 始终 与变量的静态类型匹配。 有时,这被称为健全类型。 尽管类型是强制性的, 但由于类型推断,类型注解是可选的。 Dart 类型系统也很灵活, 允许使用 dynamic
类型并结合运行时检查, 这在实验过程中或需要特别动态的代码中非常有用。
Dart 内置了 健全空安全 。 这意味着值不能为 null,除非您声明它们可以为 null。 有了健全空安全,Dart 可以通过静态代码分析来保护您免受运行时空异常的影响。 与许多其他空安全语言不同, 当 Dart 确定变量不可为空时,该变量永远不会为 null。 如果您在调试器中检查运行中的代码, 您会看到不可为空性在运行时得以保留;因此是 健全 空安全。
以下代码示例展示了几个 Dart 语言特性, 包括库、异步调用、可空和不可空类型、 箭头语法、生成器、流和 getter。 要了解有关该语言的更多信息, 请查看 Dart 语言教程 。
import 'dart:math' show Random;
void main() async {
print('Compute π using the Monte Carlo method.');
await for (final estimate in computePi().take(100)) {
print('π ≅ $estimate');
}
}
/// Generates a stream of increasingly accurate estimates of π.
Stream<double> computePi({int batch = 100000}) async* {
var total = 0; // Inferred to be of type int
var count = 0;
while (true) {
final points = generateRandom().take(batch);
final inside = points.where((p) => p.isInsideUnitCircle);
total += batch;
count += inside.length;
final ratio = count / total;
// Area of a circle is A = π⋅r², therefore π = A/r².
// So, when given random points with x ∈ <0,1>,
// y ∈ <0,1>, the ratio of those inside a unit circle
// should approach π / 4. Therefore, the value of π
// should be:
yield ratio * 4;
}
}
Iterable<Point> generateRandom([int? seed]) sync* {
final random = Random(seed);
while (true) {
yield Point(random.nextDouble(), random.nextDouble());
}
}
class Point {
final double x;
final double y;
const Point(this.x, this.y);
bool get isInsideUnitCircle => x * x + y * y <= 1;
}
Dart:库
#Dart 具有 丰富的核心库集 , 为许多日常编程任务提供必需项:
- 内置类型、集合和其他核心功能,适用于每个 Dart 程序 (
dart:core
) - 更丰富的集合类型,例如队列、链表、哈希映射和二叉树 (
dart:collection
) - 用于在不同数据表示之间转换的编码器和解码器,包括 JSON 和 UTF-8 (
dart:convert
) - 数学常量和函数以及随机数生成 (
dart:math
) - 对异步编程的支持,包括
Future
和Stream
等类 (dart:async
) - 高效处理固定大小数据(例如,无符号 8 字节整数)和 SIMD 数值类型的列表 (
dart:typed_data
) - 用于非 Web 应用程序的文件、套接字、HTTP 和其他 I/O 支持 (
dart:io
) - 用于与具有 C 风格接口的其他代码进行互操作的外部函数接口 (
dart:ffi
) - 使用 隔离区 进行并发编程——类似于线程但 不共享内存的独立工作程序,仅通过消息进行通信 (
dart:isolate
) - 用于需要与浏览器和文档对象模型 (DOM) 交互的基于 Web 的应用程序的 HTML 元素和其他资源 (
dart:html
)
除了核心库之外,许多 API 都是通过全面的软件包集提供的。 Dart 团队发布了许多有用的补充软件包,例如:
此外,第三方发布者和更广泛的社区 发布了数千个软件包,并支持以下功能:
要查看一系列包含 Dart 核心库的工作示例, 请阅读 核心库文档 。 要查找其他 API,请查看 常用软件包页面 。
Dart:平台
#Dart 的编译器技术允许您以不同的方式运行代码:
原生平台 : 对于针对移动和桌面设备的应用, Dart 包含具有即时 (JIT) 编译和 提前 (AOT) 编译器以生成机器码的 Dart VM。
Web 平台 : 对于针对 Web 的应用,Dart 可以进行开发或生产编译。其 Web 编译器将 Dart 转换为 JavaScript 或 WebAssembly。
Flutter 框架 是一个流行的、 多平台 UI 工具包,它由 Dart 平台提供支持, 并提供工具和 UI 库来构建可在 iOS、Android、macOS、Windows、Linux 和 Web 上运行的 UI 体验。
Dart 原生(机器代码 JIT 和 AOT){#native-platform}
#在开发过程中,快速的开发周期对于迭代至关重要。 Dart VM 提供了一个具有增量重新编译(启用热重载)、实时指标收集(支持 DevTools )和丰富的调试支持的即时编译器 (JIT)。
当应用准备部署到生产环境时——无论您是发布到应用商店还是部署到生产后端——Dart 提前 (AOT) 编译器都可以编译为本地 ARM 或 x64 机器代码。您的 AOT 编译应用启动时间始终很短。
AOT 编译代码在一个高效的 Dart 运行时中运行,该运行时强制执行健全的 Dart 类型系统,并使用快速对象分配和 分代垃圾收集器 来管理内存。
更多信息:
Dart Web(JavaScript 开发和生产以及 WebAssembly){#web-platform}
#Dart Web 允许在由 JavaScript 提供支持的 Web 平台上运行 Dart 代码。使用 Dart Web,您可以将 Dart 代码编译为 JavaScript 代码,然后在浏览器中运行——例如, V8 在 Chrome 中。或者,Dart 代码可以编译为 WebAssembly。
Dart web 包含三种编译模式:
- 增量 JavaScript 开发编译器,支持快速的开发周期。
- 优化 JavaScript 生产编译器,它将 Dart 代码编译为快速、紧凑、可部署的 JavaScript。这些效率来自诸如死代码消除之类的技术。
- 优化 WebAssembly (WasmGC) 生产编译器,它将 Dart 代码编译为超快速、可部署的 WebAssembly GC 代码。
更多信息:
Dart 运行时 {#runtime}
#无论您使用哪个平台或如何编译代码, 执行代码都需要 Dart 运行时。 此运行时负责以下关键任务:
内存管理: Dart 使用托管内存模型, 其中未使用的内存由垃圾收集器 (GC) 重新收集。
强制执行 Dart 类型系统: 尽管 Dart 中的大多数类型检查是静态的(编译时), 但某些类型检查是动态的(运行时)。 例如,Dart 运行时通过 类型检查和强制转换运算符 强制执行动态检查。
管理 隔离区 : Dart 运行时控制主隔离区(代码通常在其中运行) 以及应用创建的任何其他隔离区。
在原生平台上,Dart 运行时会自动 包含在独立的可执行文件中, 并且是 dart run
命令提供的 Dart VM 的一部分。
学习 Dart
#您可以通过多种方式学习 Dart。以下是一些我们推荐的方法:
- 通过 DartPad(一个基于 Web 的 Dart 代码执行环境) 在浏览器中探索 Dart 。
- 学习 Dart 语言教程 , 它将向您展示如何使用每个主要的 Dart 功能。
- 完成 Dart 教程 , 该教程涵盖了使用 Dart 构建命令行应用的基础知识。
- 参加来自 Dart 专家提供的广泛在线培训 。
- 浏览 API 文档 , 其中描述了 Dart 核心库。
- 阅读关于 Dart 编程的书籍 。
除非另有说明,否则本网站上的文档反映的是 Dart 3.6.0。页面最后更新于 2025-02-05。 查看源代码 或 报告问题.