现在位置: 首页 > Dart 教程 > 正文

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 及以上版本中验证通过。