控制流语句
控制流语句决定代码执行的顺序。Dart 提供了各种用于决策和迭代的控制结构。
条件语句
if-else
dart
int age = 18;
if (age >= 18) {
print('成年人');
} else {
print('未成年人');
}
// if-else if-else
int score = 85;
if (score >= 90) {
print('A');
} else if (score >= 80) {
print('B');
} else if (score >= 70) {
print('C');
} else {
print('F');
}条件表达式
三元运算符
dart
int age = 20;
String status = age >= 18 ? '成年人' : '未成年人';
print(status); // 成年人空值感知运算符
dart
String? name;
String displayName = name ?? '访客';
print(displayName); // 访客
// 如果为空则赋值
name ??= '默认名称';switch-case
dart
String grade = 'B';
switch (grade) {
case 'A':
print('优秀!');
break;
case 'B':
print('良好!');
break;
case 'C':
print('及格');
break;
default:
print('无效成绩');
}
// 多个 case
String day = '星期六';
switch (day) {
case '星期六':
case '星期日':
print('周末');
break;
default:
print('工作日');
}循环
for 循环
dart
// 标准 for 循环
for (int i = 0; i < 5; i++) {
print('计数:$i');
}
// For-in 循环
List<String> fruits = ['苹果', '香蕉', '橙子'];
for (var fruit in fruits) {
print(fruit);
}
// forEach 方法
fruits.forEach((fruit) {
print(fruit);
});while 循环
dart
int count = 0;
while (count < 5) {
print('计数:$count');
count++;
}do-while 循环
dart
int num = 0;
do {
print('数字:$num');
num++;
} while (num < 5);循环控制
break
立即退出循环:
dart
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // 当 i 为 5 时退出循环
}
print(i);
}
// 输出:0, 1, 2, 3, 4continue
跳过当前迭代:
dart
for (int i = 0; i < 5; i++) {
if (i == 2) {
continue; // 当 i 为 2 时跳过
}
print(i);
}
// 输出:0, 1, 3, 4断言
用于调试以确保条件为真:
dart
int age = 15;
assert(age >= 18, '年龄必须为 18 岁或以上');
// 如果条件为假,在调试模式下抛出错误模式匹配(Dart 3.0+)
Switch 表达式
dart
String grade = 'B';
String message = switch (grade) {
'A' => '优秀!',
'B' => '良好!',
'C' => '及格',
_ => '无效成绩',
};
print(message); // 良好!if-case
dart
Object value = 42;
if (value case int n when n > 0) {
print('正整数:$n');
}集合控制流
集合 if
dart
bool includeZero = true;
List<int> numbers = [
1,
2,
if (includeZero) 0,
3,
];
print(numbers); // [1, 2, 0, 3]集合 for
dart
List<int> original = [1, 2, 3];
List<int> doubled = [
for (var num in original) num * 2,
];
print(doubled); // [2, 4, 6]展开运算符
dart
List<int> list1 = [1, 2, 3];
List<int> list2 = [4, 5, 6];
List<int> combined = [...list1, ...list2];
print(combined); // [1, 2, 3, 4, 5, 6]
// 空值感知展开
List<int>? nullableList;
List<int> safe = [...?nullableList, 1, 2];
print(safe); // [1, 2]最佳实践
- 使用 switch 表达式以获得更清晰的代码(Dart 3.0+)
- 在迭代集合时优先使用 for-in而不是传统的 for 循环
- 使用集合 if/for进行条件列表构建
- 避免深层嵌套的 if-else 语句
- 使用提前返回来减少嵌套
完整示例
dart
void main() {
// 成绩计算器
List<int> scores = [85, 92, 78, 95, 88];
print('=== 成绩报告 ===');
for (int i = 0; i < scores.length; i++) {
int score = scores[i];
String grade = switch (score) {
>= 90 => 'A',
>= 80 => 'B',
>= 70 => 'C',
>= 60 => 'D',
_ => 'F',
};
print('测试 ${i + 1}:$score - 等级 $grade');
}
// 计算平均分
int total = 0;
for (var score in scores) {
total += score;
}
double average = total / scores.length;
print('\n平均分:${average.toStringAsFixed(2)}');
// 及格/不及格状态
String status = average >= 70 ? '及格' : '不及格';
print('状态:$status');
// 筛选及格分数
List<int> passingScores = [
for (var score in scores)
if (score >= 70) score,
];
print('\n及格分数:$passingScores');
}