通关 Dart 之路|循环流程与聚合类型相伴

2023年 8月 15日 58.9k 0

学习 Dart 循环流程,与聚合类型相伴

在编程的大海中,循环如同航行的罗盘,指引着我们穿越复杂的代码世界。循环语句为我们提供了一种能够根据条件不断执行循环体的机制,它是算法和数据结构的基石。从宏观角度看,程序运行完毕就会终止,因此几乎所有的软件都需要一个循环来保持运行。从微观视角看,一切的遍历操作都依赖循环流程。在 Dart 编程中,循环的主要形式是 for 循环和 while 循环。

标准 for 循环

标准的 for 循环具有简明的结构,括号内有三个部分,由分号分隔。startExp 是进入循环体前执行的表达式,仅在循环开始时执行一次;condition 是一个 bool 类型的条件,作为循环的“阀门”,只有在为 true 时允许执行循环体;eachLoopExp 在每次循环体结束后触发,通常用于修改 condition 的条件。

for (startExp; condition; eachLoopExp) {
  loopBody
}

让我们通过一个例子来感受一下,对于 List 来说,遍历访问其中的元素是非常常见的操作。下面的示例展示了通过标准 for 循环遍历输出列表元素的过程:

List cnNumUnits = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
for (int i = 0; i < cnNumUnits.length; i++) {
  print(cnNumUnits[i]);
}

在上面的代码中,首先在进入循环体之前,会执行 int i = 0 来初始化局部变量 i。然后判断 i < cnNumUnits.length 是否成立,如果成立则执行循环体,否则循环终止。在循环体执行完毕后,会触发 i++ 表达式,递增 i,然后再次判断 i < cnNumUnits.length 是否成立。可以看出,eachLoopExp 的作用是控制循环流程的终止条件。

我们可以将上述结构拆解开来,等效于如下代码。尽管不推荐这种写法,但通过这样的变形,你会更深刻地理解 for 循环的三个部分,而不仅仅是机械地记住结构。

 cnNumUnits = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
int i = 0;
bool condition = i < cnNumUnits.length;
for (; condition; ) {
  print(cnNumUnits[i]);
  i++;
  condition = i < cnNumUnits.length;
}

正如我在前面所说,对于初学者来说,循环的逻辑可能会稍显复杂。但是不要紧,随着你的不断接触和实践,这种感觉会渐渐变得熟悉,逐渐地,你会更加理解循环的本质。

for...in 循环

事实上,for...in 循环只是列表遍历的一种简写形式,它隐藏了循环三部分的细节,直接遍历访问元素。这在某些情况下很方便,但它也没有直接访问索引的能力。根据具体情况,你可以选择使用 for...in 或者 for 循环。

 cnNumUnits = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
for (String element in cnNumUnits) {
  print(element);
}

关于遍历中的 forEach 方法,虽然也是一种遍历方式,但它是类方法的一部分,而我们目前主要关注语法级的内容。从源码来看,forEach 实际上也是使用 for...in 实现的,没有太多需要讲解的。

while 循环

另一种常见的循环形式是 while 循环,它在满足条件的情况下不断执行循环体。与 for 循环不同,while 循环只需要一个条件表达式,没有初始值和递增表达式。因此,它更适合在循环体执行前进行条件判断,或者在不确定循环次数的情况下使用。

int count = 0;
while (count < 5) {
  print('Count: $count');
  count++;
}

在上述代码中,循环会在 count 小于 5 的条件下一直执行。每次循环体执行完毕,count 会递增,直到 count 不再满足小于 5 的条件,循环终止。

do...while 循环

do...while 循环与 while 循环相似,区别在于 do...while 循环会先执行一次循环体,然后再进行条件判断。这意味着 do...while 循环至少会执行一次循环体,而 while 循环可能一次都不执行。

int num = 1;
do {
print('Number: $num');
num++;
} while (num

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论