【Flutter】Dart:流程控制语句

embedded/2024/10/18 3:04:06/

在 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/embedded/128331.html

相关文章

unity动态批处理

unity动态批处理 动态批处理要求和兼容性渲染管线兼容性 使用动态批处理网格的动态批处理限制动态生成几何体的动态批处理 动态批处理 动态批处理是一种绘制调用批处理方法&#xff0c;用于批处理移动的 GameObjects 以减少绘制调用。动态批处理在处理网格和 Unity 在运行时动…

python菜鸟知识

去除空格 str 这是 含 空格 print(f去除两端空格{str.strip()}) print(f去除左端空格{str.lstrip()}) print(f去除右端空格{str.rstrip()}) print(f去除全部空格{str.replace(" ", "")}) 方法返回对象yield yield :.join([ip, port])yield {ranking…

基于SpringBoot+Vue+Uniapp家具购物小程序的设计与实现

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

linux查看k8s的开机启动状态 systemctl is-enabled 查看开机启动状态

查看k8s的开机启动状态 在Kubernetes中&#xff0c;通常使用systemd来管理服务的启动。但是&#xff0c;Kubernetes节点上的服务可能不是由systemd直接管理&#xff0c;而是通过kubelet服务来管理。因此&#xff0c;检查Kubernetes节点的开机启动状态&#xff0c;你需要检查ku…

面腾讯后台开发,二面挂掉了,,,

随着各厂秋招的开启&#xff0c;收到面试邀请的同学也越来越多。在当年和我一起找实习的同学里面&#xff0c;有实力较强的同学收到了腾讯后台开发的校招面试邀请。但面试不止是实力的竞争&#xff0c;也有很重要的运气的因素。 虽然我的同学在腾讯后台开发的二面中挂掉了&…

PythonExcel批量pingIP地址

问题&#xff1a; 作为一个电气工程师&#xff08;PLC&#xff09;&#xff0c;当设备掉线的时候&#xff0c;需要用ping工具来检查网线物理层是否可靠连接&#xff0c;当项目体量过大时&#xff0c;就不能一个手动输入命令了。 解决方案一&#xff1a; 使用CMD命令 for /L %…

MySQL—关于数据库的CRUD—(增删改查)

文章目录 关于数据库的使用&#xff1a;1. 数据库的背景知识&#xff1a;2. MYSQL数据库软件的使用&#xff08;MYSQL安装的问题在另一篇博客中讲解&#xff09;。&#xff08;1&#xff09;启动MYSQL数据库软件&#xff08;2&#xff09;开始使用数据库程序&#xff1a;1&…

学习threejs,THREE.LineDashedMaterial 虚线材质,基于gosper高斯帕曲线生成雪花动画

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.LineDashedMaterial虚…