【Flutter】Dart:流程控制语句

server/2024/10/23 18:24:01/

在 Dart 编程中,流程控制语句决定了程序的执行顺序和流程。掌握这些语句可以帮助开发者根据不同条件进行分支决策、执行重复任务、控制代码跳转等。本文将详细介绍 Dart 中的流程控制语句,涵盖分支语句、循环语句和跳转语句。

分支语句

分支语句允许程序根据条件的不同执行不同的代码块。Dart 中常见的分支语句包括 if-elseswitch-case

if-else 语句

if-else 是最常见的分支语句,根据条件的真假执行不同的代码。它的基本语法如下:

if (condition) {// 当 condition 为 true 时执行
} else {// 当 condition 为 false 时执行
}

示例:

int score = 85;if (score >= 90) {print('Excellent');
} else if (score >= 75) {print('Good');
} else {print('Needs Improvement');
}

在这个例子中,程序根据 score 的值输出不同的评语。

三元运算符

三元运算符是 if-else 的简写形式,适用于简单的条件判断。其语法是:

condition ? expr1 : expr2;

如果 conditiontrue,返回 expr1,否则返回 expr2

示例:

int age = 18;
String eligibility = (age >= 18) ? 'Eligible to vote' : 'Not eligible to vote';
print(eligibility);  // 输出 Eligible to vote

switch-case 语句

switch-case 语句用于根据多个可能的值选择要执行的代码块。它比 if-else 更适合处理固定值的多个分支。

switch (expression) {case value1:// 当 expression == value1 时执行break;case value2:// 当 expression == value2 时执行break;default:// 其他情况
}

示例:

String grade = 'A';switch (grade) {case 'A':print('Excellent');break;case 'B':print('Good');break;case 'C':print('Fair');break;default:print('Unknown grade');
}

switch-case 语句中,每个 case 分支必须以 break 结束,除非明确希望继续执行下一个 case(称为“贯穿”),否则会出现逻辑错误。

循环语句

循环语句允许程序重复执行某段代码,直到满足特定条件。Dart 支持多种循环方式,包括 forwhiledo-while

for 循环

for 循环常用于已知循环次数的场景,语法如下:

for (initialization; condition; increment/decrement) {// 循环体
}

示例:

for (int i = 0; i < 5; i++) {print('Iteration $i');
}

上面的代码将输出 5 次 “Iteration”,从 i = 0i = 4

for-in 循环

for-in 循环用于遍历集合(如 ListSetMap)中的每个元素。

示例:

List<String> fruits = ['Apple', 'Banana', 'Cherry'];for (var fruit in fruits) {print(fruit);
}

该代码将遍历 fruits 列表,依次打印每个水果的名称。

while 循环

while 循环在条件为 true 时重复执行代码,直到条件为 false 时结束。语法如下:

while (condition) {// 循环体
}

示例:

int i = 0;while (i < 5) {print('Iteration $i');i++;
}

这个循环与 for 循环效果相同,直到 i 不小于 5 时停止。

do-while 循环

do-whilewhile 类似,但它至少执行一次代码块,然后再检查条件。其语法为:

do {// 循环体
} while (condition);

示例:

int i = 0;do {print('Iteration $i');i++;
} while (i < 5);

这个例子中,代码块至少会执行一次,即使 i 的初始值不满足条件。

跳转语句

跳转语句控制代码执行的流向。Dart 提供了 breakcontinuereturnthrow 等跳转语句。

break 语句

break 语句用于立即终止循环或 switch-case 分支的执行。

示例:

for (int i = 0; i < 5; i++) {if (i == 3) {break;  // 当 i == 3 时,跳出循环}print('Iteration $i');
}

上面的代码将输出 Iteration 0Iteration 1Iteration 2,然后在 i == 3 时跳出循环。

continue 语句

continue 语句用于跳过当前循环的剩余代码,直接进入下一次循环迭代。

示例:

for (int i = 0; i < 5; i++) {if (i == 3) {continue;  // 跳过 i == 3 的迭代}print('Iteration $i');
}

这个例子中,i == 3 时的迭代被跳过,因此输出为 Iteration 0Iteration 4,但不包含 Iteration 3

return 语句

return 语句用于从函数中返回值,并结束函数的执行。

示例:

int add(int a, int b) {return a + b;  // 返回 a 和 b 的和
}void main() {int result = add(3, 5);print('Result: $result');  // 输出 Result: 8
}

在这个例子中,return 将结果返回给调用者。

throw 语句

throw 语句用于抛出一个异常。它通常与 try-catch 语句配合使用,用于处理错误情况。

示例:

void checkAge(int age) {if (age < 18) {throw Exception('Age must be at least 18');}print('Eligible to vote');
}void main() {try {checkAge(16);} catch (e) {print('Error: $e');}
}

在这个例子中,如果 age 小于 18,则抛出异常,并在 catch 块中捕获该异常。

循环控制语句的进阶用法

嵌套循环

Dart 支持嵌套循环,即一个循环内可以再包含一个或多个循环。

示例:

for (int i = 1; i <= 3; i++) {for (int j = 1; j <= 3; j++) {print('i = $i, j = $j');}
}

输出:

i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 1
...

使用 label 控制循环跳转

Dart 支持使用 label(标签)来精确控制多层嵌套循环的跳转。通过 label,可以指定跳出哪一层循环。

示例:

outerLoop: 
for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {if (i == 2 && j == 2) {break outerLoop;  // 跳出最外层循环}print('i = $i, j = $j');}
}

i == 2j == 2 时,break outerLoop 将跳出整个外层循环,而不仅仅是内层

循环。

总结

Dart 中的流程控制语句为编写灵活高效的代码提供了强大的工具。通过 if-elseswitch-case 实现分支逻辑,通过 forwhiledo-while 实现循环控制,并通过 breakcontinuereturnthrow 等跳转语句控制程序的执行流程。掌握这些语句是编写 Flutter 应用程序的基础,可以帮助开发者更好地应对复杂的业务逻辑。

关键要点:
  1. 分支语句:根据条件执行不同的代码路径,if-elseswitch-case 是两种常见形式。
  2. 循环语句:用于重复执行代码块,forwhiledo-while 是常用的循环控制结构。
  3. 跳转语句:用于中断或控制代码的执行流程,包括 breakcontinuereturn 等。

http://www.ppmy.cn/server/134229.html

相关文章

SpringBoot驱动的车辆信息管理平台

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

【办公类-57-01】美工室材料报销EXCEL表批量插入截图(图片)

背景需求&#xff1a; 我们班分到美工室&#xff0c;需要准备大量材料&#xff0c;根据原始的报销单EXCLE&#xff0c;里面有商品名称、图片、链接、单位、数量等信息 今天我和搭档一起填写新表&#xff0c;发现手机截图的图片插入EXCEL后非常大&#xff0c; 需要手动调整图片…

Android studio中排除文件功能的小总结

刚开始发现android studio的sourceSets的main下面java的excludes无效&#xff0c;改了好多次都没成功&#xff0c;以为关键字不支持&#xff0c;或者是gradle版本问题&#xff0c;结果查了半天没成功。后来经过对比发现是相对路径问题。 在此总结一下&#xff0c;希望节省大家…

Axure科技感元件:打造可视化大屏设计的得力助手

Axure&#xff0c;作为一款专业的原型设计工具&#xff0c;凭借其强大的设计功能、丰富的组件库和灵活的交互能力&#xff0c;成为了许多设计师打造科技感设计的首选工具。其中&#xff0c;Axure科技感元件更是以其独特的魅力和实用性&#xff0c;在数据可视化大屏、登录界面、…

Zookeeper面试整理-Zookeeper的特性

Zookeeper 具有一些关键的特性,这些特性使其成为分布式系统中非常可靠的协调服务工具。以下是 Zookeeper 的主要特性: 1. 顺序一致性(Sequential Consistency) Zookeeper 保证了所有客户端的操作是按照严格的顺序执行的。每个客户端在对 ZNode 进行操作时,会看到与其他客户…

C++容器适配器的模拟实现-stack、queue、priority_queue

### 容器适配器是将容器转换到其他容器自身不方便使用的地方&#xff0c;但是就容器适配器其本身还是包装的容器&#xff0c;所以这个类模板中各个接口的实现都是调用的容器的接口&#xff0c;因为容器适配器可能适配多个容器&#xff0c;所以这个类模板的模板参数中有一个参数…

基于SpringBoot+Vue+uniapp的电影信息推荐APP的详细设计和实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

Mamba学习笔记(4)——Mamba核心

文章目录 A Visual Guide to Mamba and State Space Models第一部分&#xff1a;The Problem with Transformers第二部分&#xff1a;The State Space Model&#xff08;SSM&#xff09;What is a State Space?What is a State Space Model? 第三部分&#xff1a;Mamba - Sel…