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

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

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

标准 for 循环

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

for (startExp; condition; eachLoopExp) {
  loopBody
}

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

List<String> 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 循环的三个部分,而不仅仅是机械地记住结构。

<String> 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 循环。

<String> 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 <= 5);

在上面的代码中,不论条件是否成立,循环体都会至少执行一次。

小结

通过学习 Dart 的循环流程和聚合类型,我们可以更好地掌握数据的操作和流程的控制。不同的循环形式适用于不同的场景,了解它们的特点和使用方法,有助于我们更加灵活地处理各种编程任务。通过实际练习,你会逐渐熟悉循环和数据集合的操作,为编写更复杂的程序打下坚实的基础。

全部评论

相关推荐

头像
今天 14:28
长沙理工大学
刷算法真的是提升代码能力最快的方法吗?&nbsp;刷算法真的是提升代码能力最快的方法吗?
牛牛不会牛泪:看你想提升什么,代码能力太宽泛了,是想提升算法能力还是工程能力? 工程能力做项目找实习,算法也分数据结构算法题和深度学习之类算法
点赞 评论 收藏
分享
11-09 11:01
济南大学 Java
Java抽象带篮子:外卖项目真得美化一下,可以看看我的详细的外卖话术帖子
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务