Dart 简介
Dart 是由 Google 开发的一种现代化编程语言,专为构建高性能、跨平台应用而设计。
本章带你了解 Dart 的起源、设计理念以及它在前端、移动端和服务端的广泛应用场景。

Dart 的历史与设计目标
Dart 诞生于 2011 年,最初的目标是替代 JavaScript 成为浏览器的原生脚本语言。
虽然这个目标未能实现,但 Dart 在 2017 年迎来了关键转折点——Flutter 框架的发布让 Dart 重新进入开发者视野。
Dart 的设计目标非常明确:
| 设计目标 | 说明 |
|---|---|
| 高性能 | 支持 AOT(提前编译)和 JIT(即时编译),既能快速开发又能生成原生代码 |
| 强类型 | 支持类型推断,兼顾类型安全与开发效率 |
| 跨平台 | 一套代码可编译为 ARM、x64 机器码或 JavaScript |
| 易学习 | 语法借鉴 Java、JavaScript、C# 等主流语言,降低学习成本 |
| 空安全 | 内置 Null Safety 机制,从语言层面避免空指针异常 |
Dart 2.0 在 2018 年发布,标志着语言走向成熟。Dart 3.0 在 2023 年发布,进一步加强了类型系统和模式匹配等特性。
Dart 的应用场景
Dart 的应用场景非常广泛,覆盖了从移动端到服务端的全栈开发需求。
移动端开发(Flutter)
这是 Dart 目前最核心的应用场景。
通过 Flutter 框架,Dart 可以构建 iOS 和 Android 双平台的原生应用,一套代码同时运行。
Web 开发
Dart 可以编译为 JavaScript,用于构建 Web 前端应用。
AngularDart 是 Google 维护的 Dart 版 Angular 框架,适合大型 Web 项目。
服务端开发
通过 dart:io 库和 Shelf 等框架,Dart 也能编写高性能的服务端应用。
Google 内部有多个服务端项目使用 Dart 编写。
命令行工具
Dart 可以编译为独立的可执行文件,非常适合编写跨平台的 CLI 工具。
| 应用场景 | 编译目标 | 典型框架/工具 |
|---|---|---|
| 移动端 | ARM 机器码 | Flutter |
| Web 前端 | JavaScript | AngularDart |
| 服务端 | 机器码 / JIT | Shelf、Dart Frog |
| 命令行 | 机器码 | dart compile exe |
Dart 与 JavaScript 对比
Dart 和 JavaScript 都是面向对象的语言,但 Dart 在语言设计上更加严谨。
下面从几个维度对比两者的差异:
| 对比维度 | Dart | JavaScript |
|---|---|---|
| 类型系统 | 强类型,支持类型推断 | 弱类型,动态类型 |
| 空安全 | 内置 Null Safety | 无(需 TypeScript 或手动检查) |
| 入口函数 | 必须有 main() 函数 | 脚本直接执行 |
| 类与继承 | 基于类的 OOP,单继承 | 基于原型链 |
| 编译方式 | AOT + JIT 双模式 | JIT 为主 |
| 并发模型 | Isolate(消息传递) | Worker 线程 / 事件循环 |
| 包管理 | pub.dev(统一官方仓库) | npm(社区仓库) |
如果你有 JavaScript 基础,学习 Dart 会非常轻松——它们的异步语法(async/await)几乎完全相同。
但 Dart 的类型系统和空安全机制会让你在大型项目中更有安全感。
实例
同样的功能在两种语言中的写法对比:
function greet(name) {
if (name === null || name === undefined) {
return 'Hello, stranger!';
}
return `Hello, ${name}!`;
}
console.log(greet('runoob'));
console.log(greet(null));
String greet(String? name) {
// name 可能为 null,需要显式处理
if (name == null) {
return 'Hello, stranger!';
}
return 'Hello, $name!';
}
void main() {
print(greet('runoob'));
print(greet(null));
}
Hello, runoob! Hello, stranger!
Dart 与 Flutter 的关系
很多人第一次接触 Dart 是因为 Flutter。
实际上,Flutter 是 Dart 的"杀手级应用",但 Dart 本身是一门独立的通用编程语言。
Flutter 选择 Dart 的原因有以下几点:
- JIT 编译支持热重载(Hot Reload),修改代码后亚秒级看到效果,极大提升开发效率
- AOT 编译生成原生机器码,应用启动快、运行流畅,无 JavaScript Bridge 的性能损耗
- Dart 的声明式 UI与 Flutter 的 Widget 树结构天然契合
- 统一技术栈:Google 同时维护语言和框架,版本兼容性好
学习 Flutter 之前,建议先掌握 Dart 基础。理解语言特性后,Flutter 的学习曲线会平滑很多。本教程就是为这个目标准备的。
Dart 版本发展简史
| 版本 | 发布时间 | 重要特性 |
|---|---|---|
| Dart 1.0 | 2013 年 | 首个稳定版,基本语言特性 |
| Dart 2.0 | 2018 年 | 强类型系统,new/const 可选 |
| Dart 2.12 | 2021 年 | 引入 Null Safety |
| Dart 3.0 | 2023 年 | 模式匹配、Records、类修饰符 |
本教程基于 Dart 3.x 版本编写,所有代码示例都在 Dart 3.0 及以上版本中验证通过。
