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 前端JavaScriptAngularDart
服务端机器码 / JITShelf、Dart Frog
命令行机器码dart compile exe
Dart 与 JavaScript 对比
Dart 和 JavaScript 都是面向对象的语言,但 Dart 在语言设计上更加严谨。
下面从几个维度对比两者的差异:
对比维度DartJavaScript
类型系统强类型,支持类型推断弱类型,动态类型
空安全内置 Null Safety无(需 TypeScript 或手动检查)
入口函数必须有 main() 函数脚本直接执行
类与继承基于类的 OOP,单继承基于原型链
编译方式AOT + JIT 双模式JIT 为主
并发模型Isolate(消息传递)Worker 线程 / 事件循环
包管理pub.dev(统一官方仓库)npm(社区仓库)
如果你有 JavaScript 基础,学习 Dart 会非常轻松——它们的异步语法(async/await)几乎完全相同。
但 Dart 的类型系统和空安全机制会让你在大型项目中更有安全感。
实例
同样的功能在两种语言中的写法对比:
// JavaScript 版本
function greet(name) {
if (name === null || name === undefined) {
return 'Hello, stranger!';
}
return `Hello, ${name}!`;
}
console.log(greet('runoob'));
console.log(greet(null));
// Dart 版本——空安全让类型更明确
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.02013 年首个稳定版,基本语言特性
Dart 2.02018 年强类型系统,new/const 可选
Dart 2.122021 年引入 Null Safety
Dart 3.02023 年模式匹配、Records、类修饰符
本教程基于 Dart 3.x 版本编写,所有代码示例都在 Dart 3.0 及以上版本中验证通过。