Dart: Dart 语言简介 — 从诞生到生态全景

Dart — 一门为多平台而生的语言,从 Flutter 到 CLI,从 Web 到 Server,一套代码走天下。

1. 你将学到


2. 一个开发者的真实故事

(1) 痛点:多平台开发的碎片化噩梦

Bob 是一名全栈开发者,负责一个电商数据分析 SaaS 产品。他需要同时维护 Web 前端(JavaScript)、移动端(Kotlin + Swift)、后端服务(Go)和 CLI 工具(Python)。4 种语言、4 套工具链、4 份代码库 — 修一个 bug 要改 4 遍。当产品经理要求"实时仪表盘"时,Bob 不得不在 Flutter 和原生开发之间反复权衡,团队沟通成本飙升到每周 20 小时。

(2) Dart 的解法

Dart 提供了统一的技术栈:一套语言覆盖前端(Flutter Web)、移动端(Flutter Mobile)、后端(Dart shelf)和 CLI(dart:io)。Bob 用 Dart 重写整个项目,核心业务逻辑只需写一次。

DART
// Shared business logic - runs on CLI, Web, Mobile, Server
class DataPipeline {
  final String name;
  final int maxRecords;

  const DataPipeline({
    required this.name,
    this.maxRecords = 1000000,
  });

  String get summary => '$name: capacity ${maxRecords} records';
}
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

(3) 收益


3. Dart 的诞生与演进

(1) 诞生背景

Dart 由 Google 的 Lars Bak 和 Kasper Lund 于 2011 年发布,初衷是替代 JavaScript 成为 Web 的主力语言。2015 年 Flutter 的出现改变了 Dart 的命运 — 从"Web 语言"转型为"多平台语言"。

100%
graph LR
  A[Dart 1.0<br/>2011] --> B[Dart 2.0<br/>2018<br/>Strong typing]
  B --> C[Dart 2.12<br/>2021<br/>Null Safety]
  C --> D[Dart 3.0<br/>2023<br/>Records/Pattern/Sealed]
  D --> E[Dart 3.x<br/>2024+<br/>Wasm GC]
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
版本里程碑 年份 核心特性 意义
Dart 1.0 2011 可选类型 Web 替代方案
Dart 2.0 2018 Strong mode + 静态类型 类型安全根基
Dart 2.12 2021 Sound Null Safety 消灭空指针
Dart 3.0 2023 Records / Pattern Matching / Sealed Classes 现代语言特性
Dart 3.x 2024+ Wasm GC 支持 Web 性能飞跃

(2) Google 战略定位

Dart 是 Flutter 的唯一官方语言,也是 Google 内部 Fuchsia OS 的应用层语言。Google 对 Dart 的投入是长期战略,而非实验项目。

战略维度 定位
移动端 Flutter 的核心语言
Web 端 编译为 JS / Wasm 运行
桌面端 Flutter Desktop
服务端 shelf / dart:io
嵌入式 Fuchsia OS 应用层

4. Dart vs 其他语言

(1) 核心差异对比

100%
graph LR
  A[Dart] --> B[Null Safety]
  A --> C[Pattern Matching]
  A --> D[Sealed Classes]
  A --> E[AOT + JIT]
  A --> F[Isolate 并发]

  G[JavaScript] --> H[Dynamic typing]
  G --> I[Single thread]

  J[TypeScript] --> K[Type erasure]
  J --> L[No runtime types]

  M[Kotlin] --> N[JVM dependent]
  M --> O[Coroutines]
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
维度 Dart JavaScript TypeScript Kotlin
类型系统 Sound Static Dynamic Static (erased) Static
Null Safety Sound (compile-time) 非强制 非强制
AOT 编译 支持 不支持 不支持 支持 (Native)
并发模型 Isolate (无共享) 单线程 单线程 协程
Pattern Matching Dart 3 原生 有限支持
Sealed Classes Dart 3 原生 支持
Flutter 支持 唯一官方 间接 (KMP)
学习曲线 中等

(2) Dart 的独特优势


5. Dart 3 三大支柱

(1) Null Safety

Sound Null Safety 将类型分为可空 T? 和非空 T,编译器在编译期保证非空类型永远不会为 null。

DART
// Non-nullable - compiler guarantees non-null
String name = 'Bob';

// Nullable - must check before use
String? nickname = null;

// Safe access
int length = nickname?.length ?? 0;
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

(2) Pattern Matching

Dart 3 引入了完整的模式匹配体系,支持 destructuring、if-case、switch 表达式和穷尽检查。

DART
// Switch expression with pattern matching
String describe(Object value) => switch (value) {
  int i => 'Integer: $i',
  double d => 'Double: $d',
  String s => 'String: $s',
  _ => 'Unknown type',
};
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

(3) Sealed Classes

Sealed class 限制子类在同一库内,编译器可保证 switch 穷尽性。

DART
sealed class DataSource {}
class ApiSource extends DataSource { final String endpoint; ApiSource(this.endpoint); }
class FileSource extends DataSource { final String path; FileSource(this.path); }
class DatabaseSource extends DataSource { final String connectionString; DatabaseSource(this.connectionString); }

// Exhaustive switch - compiler checks all cases
String describe(DataSource source) => switch (source) {
  ApiSource(:final endpoint) => 'API: $endpoint',
  FileSource(:final path) => 'File: $path',
  DatabaseSource(:final connectionString) => 'DB: $connectionString',
};
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
特性 解决的问题 示例场景
Null Safety 运行时空指针异常 配置项可选、API 返回可空
Pattern Matching 冗长的 if-else 链 类型判断、数据解构
Sealed Classes 忘记处理分支 数据源类型、状态机

6. Dart 生态全景

(1) 核心生态组件

100%
graph LR
  A[Dart Ecosystem] --> B[Flutter<br/>Mobile/Desktop/Web]
  A --> C[pub.dev<br/>Package Registry]
  A --> D[Server-side<br/>shelf/dart:io]
  A --> E[CLI Tools<br/>args/dart:io]
  A --> F[Web<br/>dart2js/dart2wasm]
  A --> G[Testing<br/>test package]
  A --> H[Code Generation<br/>build_runner]
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
生态组件 用途 代表包
Flutter UI 框架 flutter, cupertino
pub.dev 包管理 40,000+ packages
Server-side HTTP 服务 shelf, dart_frog
CLI 命令行工具 args, cli_util
Web 前端编译 dart2js, dart2wasm
Testing 测试框架 test, mockito
Code Generation 代码生成 build_runner, json_serializable

▶ 示例

TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

:pub.dev 包搜索

Bob 在 pub.dev 搜索数据处理相关的包:

DART
// pubspec.yaml dependencies for DataPipeline
// dependencies:
//   args: ^2.4.2        # CLI argument parsing
//   http: ^1.2.0        # HTTP client
//   csv: ^6.0.0         # CSV parsing
//   sqlite3: ^2.4.0     # SQLite database
//   path: ^1.9.0        # Path manipulation
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

7. Bob 的 DataPipeline 项目概览

(1) 项目定义

DataPipeline 是 Bob 开发的电商数据分析 CLI 工具,处理百万级订单数据,输出 SaaS 仪表盘可用的报表。

▶ 示例

TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

:项目愿景

DART
// DataPipeline project overview
// Input:  1.2M e-commerce orders (CSV / API / Database)
// Process: Filter, aggregate, transform in parallel
// Output: Dashboard-ready reports (JSON / CSV / HTML)

void main() {
  print('DataPipeline v1.0.0');
  print('Processing capacity: 1,000,000+ orders');
  print('Output formats: JSON, CSV, HTML');
}
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

(2) 学习路线图

100%
graph TD
  subgraph Phase1[Phase 1: Fundamentals]
    L1[Lesson 1: Introduction]
    L2[Lesson 2: Installation]
    L3[Lesson 3: Basic Syntax]
    L4[Lesson 4: Variables & Types]
    L5[Lesson 5: Operators]
    L6[Lesson 6: Control Flow]
  end

  subgraph Phase2[Phase 2: Core Features]
    L7[Lesson 7: Functions]
    L8[Lesson 8: Classes & Objects]
    L9[Lesson 9: Collections]
    L10[Lesson 10: Exception Handling]
    L11[Lesson 11: Generics]
    L12[Lesson 12: Enums & Extensions]
  end

  subgraph Phase3[Phase 3: Advanced]
    L13[Lesson 13: Null Safety]
    L14[Lesson 14: Future / async-await]
    L15[Lesson 15: Stream]
    L16[Lesson 16: Dart 3 Features]
    L17[Lesson 17: Isolates]
    L18[Lesson 18: Metaprogramming]
  end

  subgraph Phase4[Phase 4: Operations]
    L19[Lesson 19: Package Management]
    L20[Lesson 20: Testing]
    L21[Lesson 21: Code Generation]
    L22[Lesson 22: Dart & Flutter]
  end

  subgraph Phase5[Phase 5: Project]
    L23[Lesson 23: Project Design]
    L24[Lesson 24: Optimization & Release]
  end

  Phase1 --> Phase2 --> Phase3 --> Phase4 --> Phase5
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
Phase 课次 目标 关键产出
Phase 1 L1-L6 入门基础 Hello World → 控制流
Phase 2 L7-L12 核心功能 函数/类/集合/异常/泛型/枚举
Phase 3 L13-L18 高级特性 Null Safety/异步/Stream/Dart 3/Isolate
Phase 4 L19-L22 管理运维 包管理/测试/代码生成/Flutter
Phase 5 L23-L24 综合实战 DataPipeline 完整项目

▶ 示例

TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

:DataPipeline 预览代码

DART
// DataPipeline preview - what you will build
void main() {
  // Step 1: Define data source
  final source = ApiSource('https://api.example.com/orders');

  // Step 2: Create pipeline
  final pipeline = DataPipeline(
    name: 'E-Commerce Analytics',
    maxRecords: 1200000,
  );

  // Step 3: Process and output
  print(pipeline.summary);
  // Output: E-Commerce Analytics: capacity 1200000 records
}
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

8. 完整示例:DataPipeline 项目骨架

DART
// ============================================
// DataPipeline Project Skeleton
// A CLI tool for e-commerce data analytics
// ============================================

// Data source types (sealed class for exhaustive matching)
sealed class DataSource {}

class ApiSource extends DataSource {
  final String endpoint;
  ApiSource(this.endpoint);
}

class FileSource extends DataSource {
  final String path;
  FileSource(this.path);
}

// Core pipeline class
class DataPipeline {
  final String name;
  final int maxRecords;
  DataSource? source; // nullable - may not be configured yet

  DataPipeline({
    required this.name,
    this.maxRecords = 1000000,
  });

  String get summary => '$name: capacity ${maxRecords} records';

  String describeSource() {
    if (source == null) return 'No source configured';
    return switch (source!) {
      ApiSource(:final endpoint) => 'API source: $endpoint',
      FileSource(:final path) => 'File source: $path',
    };
  }
}

// Entry point
void main() {
  final pipeline = DataPipeline(
    name: 'E-Commerce Analytics',
    maxRecords: 1200000,
  );

  pipeline.source = ApiSource('https://api.example.com/orders');

  print('=== DataPipeline ===');
  print(pipeline.summary);
  print(pipeline.describeSource());
}
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

输出:

TEXT 📖 仅展示
=== DataPipeline ===
E-Commerce Analytics: capacity 1200000 records
API source: https://api.example.com/orders

❓ 常见问题

Q:Dart 和 Flutter 是什么关系? A:Dart 是 Flutter 的唯一官方编程语言,Flutter 是基于 Dart 的 UI 框架。学 Dart 是学 Flutter 的前提。

Q:Dart 能替代 JavaScript 做前端开发吗? A:Dart 可以通过 dart2js 编译为 JavaScript,也可以通过 dart2wasm 编译为 WebAssembly。但 Web 生态仍以 JS 为主,Dart 的优势在 Flutter Web。

Q:Dart 3 的 Null Safety 是强制的吗? A:是的,Dart 3 默认开启 Sound Null Safety。旧代码需要迁移,但 Dart 2.12 起已支持渐进式迁移。

Q:Dart 适合做后端开发吗? A:适合。Dart 有 shelf、dart_frog 等后端框架,配合 Isolate 并发模型可处理高并发场景。但生态不如 Go/Java 成熟。

Q:已有 TypeScript 基础,学 Dart 难吗? A:不难。Dart 和 TS 的类型系统相似,但 Dart 的 Sound Null Safety 和 Isolate 是新概念,需要重点学习。

Q:Dart 的性能如何? A:AOT 编译后性能接近 Go/Java,JIT 模式支持热重载开发。Wasm GC 支持让 Web 端性能大幅提升。

Q:pub.dev 上包的质量如何? A:pub.dev 有质量评分系统(pub points),涵盖平台支持、文档覆盖率等。热门包如 http、args 质量很高,但小众包需自行评估。


📖 小节


📝 作业

  1. 基础题(难度⭐):访问 pub.dev,搜索 http 包并查看其 pub points 评分,记录支持的平台列表。
  2. 进阶题(难度⭐⭐):对比 Dart 和你最熟悉的编程语言(JS/Python/Java 等),列出 3 个 Dart 的优势和 3 个劣势,写一份简短对比表。
  3. 挑战题(难度⭐⭐⭐):画出 DataPipeline 项目的模块划分草图,考虑数据输入、处理、输出三个阶段各需要什么组件。

← 上一课 | 下一课 →

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏