0%

Dart 语法速览

以下是 Dart 语言基本语法高级特性 整理,涵盖从基础到进阶的内容,帮助开发者快速上手并掌握 Dart 的核心能力。


一、Dart 基本语法

1.1 程序结构

Dart 程序的入口是 main() 函数,执行程序从这里开始。

1
2
3
void main() {
print('Hello, Dart!');
}

1.2 变量和数据类型

变量声明

  • 使用 varfinalconst 声明变量。
  • Dart 是强类型语言,但可以省略类型声明。
1
2
3
var name = 'Alice';   // 类型自动推断为 String
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 循环
for (var i = 0; i < 5; i++) {
print(i);
}

// while 循环
int count = 0;
while (count < 5) {
print(count++);
}

// forEach
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; // 可以为 null
name = null;

非空断言

1
2
String? name = 'Alice';
print(name!); // 确保 name 不为空

默认值

1
2
String? name;
print(name ?? 'Default Name'); // 如果 name 为 null,则返回 'Default Name'

2.4 运算符

常用运算符

运算符 描述
?? 如果前一个值为 null,则返回后一个值
?. 安全访问操作符
! 非空断言
~/ 整除

示例

1
2
3
4
5
String? name;
print(name ?? 'Default 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()); // 输出 'Hello'
}

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); // 输出 'Hello from Isolate'
});
}

总结

基础语法

  1. Dart 支持强类型变量、空安全机制和简洁的控制语句。
  2. 提供灵活的函数声明,包括匿名函数、命名参数和默认参数。

高级特性

  1. OOP: Dart 支持类、继承、抽象类和接口。
  2. 异步编程: 使用 FutureStream 处理异步任务。
  3. 泛型: 提高代码复用性和类型安全性。
  4. 扩展与 Mixin: 为类添加扩展功能,增强代码复用。