以下是 Dart 语言 的 基本语法 和 高级特性 整理,涵盖从基础到进阶的内容,帮助开发者快速上手并掌握 Dart 的核心能力。
一、Dart 基本语法
1.1 程序结构
Dart 程序的入口是 main()
函数,执行程序从这里开始。
1 2 3
| void main() { print('Hello, Dart!'); }
|
1.2 变量和数据类型
变量声明
- 使用
var
、final
或 const
声明变量。
- Dart 是强类型语言,但可以省略类型声明。
1 2 3
| var name = 'Alice'; final age = 30; const pi = 3.14;
|
基本数据类型
类型 |
示例 |
int |
int age = 25; |
double |
double height = 1.75; |
String |
String name = 'Alice'; |
bool |
bool isTrue = true; |
List |
List<int> nums = [1, 2, 3]; |
Map |
Map<String, int> scores = {'Alice': 90}; |
Set |
Set<int> nums = {1, 2, 3}; |
dynamic |
dynamic value = 'Hello'; |
1.3 控制语句
条件语句
1 2 3 4 5
| if (age > 18) { print('Adult'); } else { print('Minor'); }
|
三元表达式
1
| String result = age > 18 ? 'Adult' : 'Minor';
|
switch-case
1 2 3 4 5 6 7
| switch (day) { case 'Monday': print('Start of the week'); break; default: print('Unknown day'); }
|
循环语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| for (var i = 0; i < 5; i++) { print(i); }
int count = 0; while (count < 5) { print(count++); }
List<int> nums = [1, 2, 3]; nums.forEach((num) => print(num));
|
1.4 函数
函数声明
1 2 3
| int add(int a, int b) { return a + b; }
|
匿名函数 (Lambda)
1
| var multiply = (int a, int b) => a * b;
|
可选参数
1 2 3
| void greet(String name, [String greeting = 'Hello']) { print('$greeting, $name!'); }
|
命名参数
1 2 3 4 5
| void printInfo({required String name, int age = 0}) { print('Name: $name, Age: $age'); }
printInfo(name: 'Alice', age: 25);
|
1.5 异常处理
Dart 使用 try-catch
捕获异常。
1 2 3 4 5 6 7
| try { int result = 10 ~/ 0; } catch (e) { print('Error: $e'); } finally { print('This always executes'); }
|
二、Dart 高级特性
2.1 面向对象编程 (OOP)
类与对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class Person { String name; int age;
Person(this.name, this.age);
void introduce() { print('Hi, I am $name, $age years old.'); } }
void main() { var person = Person('Alice', 30); person.introduce(); }
|
继承
1 2 3 4 5 6 7 8 9 10 11
| class Employee extends Person { String jobTitle;
Employee(String name, int age, this.jobTitle) : super(name, age);
@override void introduce() { super.introduce(); print('I am a $jobTitle.'); } }
|
接口和抽象类
Dart 没有显式的接口声明,类可以通过 implements
来实现接口。
1 2 3 4 5 6 7 8 9 10
| abstract class Animal { void makeSound(); }
class Dog implements Animal { @override void makeSound() { print('Woof!'); } }
|
2.2 异步编程
Future 和 async/await
1 2 3 4 5 6 7 8 9 10
| Future<String> fetchData() async { await Future.delayed(Duration(seconds: 2)); return 'Data loaded'; }
void main() async { print('Fetching data...'); String data = await fetchData(); print(data); }
|
Stream
用于处理连续的数据流。
1 2 3 4 5 6 7 8 9 10 11 12
| Stream<int> numberStream() async* { for (int i = 0; i < 5; i++) { yield i; await Future.delayed(Duration(seconds: 1)); } }
void main() { numberStream().listen((number) { print('Received: $number'); }); }
|
2.3 可空类型 (Null Safety)
Dart 提供了空安全功能,防止 null
相关的错误。
可空变量
1 2
| String? name; name = null;
|
非空断言
1 2
| String? name = 'Alice'; print(name!);
|
默认值
1 2
| String? name; print(name ?? 'Default Name');
|
2.4 运算符
常用运算符
运算符 |
描述 |
?? |
如果前一个值为 null,则返回后一个值 |
?. |
安全访问操作符 |
! |
非空断言 |
~/ |
整除 |
示例
1 2 3 4 5
| String? name; print(name ?? 'Default Name');
Map<String, String>? user; print(user?.keys);
|
2.5 泛型
Dart 支持泛型,用于提高代码复用性和类型安全性。
泛型列表
1
| List<int> nums = [1, 2, 3];
|
泛型类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Box<T> { T content;
Box(this.content);
void display() { print('Content: $content'); } }
void main() { var intBox = Box<int>(10); intBox.display();
var stringBox = Box<String>('Hello'); stringBox.display(); }
|
2.6 扩展方法
扩展方法允许为现有类添加新功能。
1 2 3 4 5 6 7 8 9
| extension StringExtension on String { String toCapitalized() { return this[0].toUpperCase() + this.substring(1); } }
void main() { print('hello'.toCapitalized()); }
|
2.7 Mixin
Mixin 是一种复用代码的方式,常用于类的功能扩展。
1 2 3 4 5 6 7 8 9 10 11 12
| mixin Swimmer { void swim() { print('Swimming...'); } }
class Fish with Swimmer {}
void main() { Fish fish = Fish(); fish.swim(); }
|
2.8 元编程 (Reflection)
Dart 提供 dart:mirrors
来支持元编程。
1 2 3 4 5 6
| import 'dart:mirrors';
void main() { var mirror = reflectClass(Person); print('Class: ${mirror.simpleName}'); }
|
2.9 Isolate 并发
Dart 的 Isolate 提供了独立的内存空间和线程模型。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import 'dart:isolate';
void isolateTask(SendPort sendPort) { sendPort.send('Hello from Isolate'); }
void main() async { final receivePort = ReceivePort(); await Isolate.spawn(isolateTask, receivePort.sendPort);
receivePort.listen((message) { print(message); }); }
|
总结
基础语法
- Dart 支持强类型变量、空安全机制和简洁的控制语句。
- 提供灵活的函数声明,包括匿名函数、命名参数和默认参数。
高级特性
- OOP: Dart 支持类、继承、抽象类和接口。
- 异步编程: 使用
Future
和 Stream
处理异步任务。
- 泛型: 提高代码复用性和类型安全性。
- 扩展与 Mixin: 为类添加扩展功能,增强代码复用。