ZetCode

Dart 控制流

最后修改日期:2024 年 1 月 28 日

在本文中,我们将讨论 Dart 中的流程控制。我们定义了几个关键字,使我们能够控制 Dart 程序的流程。

当 Dart 程序运行时,代码是从上到下执行的。程序的流程可以通过各种关键字来改变,包括 if/else、for、while 和 switch。

控制流结构可用于有条件地或多次执行代码。

Dart if & else

if 语句指定了代码块的条件执行。如果表达式求值为 true,则执行代码块。如果存在 else 语句且 if 语句求值为 false,则执行 else 之后的代码块。

可以有多个 if/else 语句。

Dart if/else 示例

以下示例演示了使用 if/else 的代码块的条件执行。

main.dart
void main() {
  final num = 4;

  if (num > 0) {
    print("The number is positive");
  }
}

在示例中,我们有一个简单的条件;如果 num 变量为正数,则将消息“The number is positive”打印到控制台。否则;不打印任何内容。

$ dart main.dart
The number is positive

由于值 4 是正数,因此打印了该消息。

main.dart
void main() {
  final num = -4;

  if (num > 0) {
    print("The number is positive");
  } else {
    print("The number is negative");
  }
}

现在我们添加了第二个分支。else 语句指定了在 if 条件失败时执行的代码块。

$ dart main.dart
The number is negative

对于 -4 值,将打印“The number is negative”。

main.dart
import 'dart:math';

void main() {
  const int MAX = 10;
  final num = new Random().nextInt(MAX) - 5;

  if (num > 0) {
    print("The number is positive");
  } else if (num == 0) {
    print("The number is zero");
  } else {
    print("The number is negative");
  }
}

在此示例中,我们使用 if else 添加了其他分支。我们生成介于 -5 和 4 之间的随机值。借助 if & else 语句,我们可以为所有三个选项打印消息。

Dart switch 语句

switch 语句是一种选择控制流语句。它以比使用 if/else 语句组合更简单的方式创建多个分支。

switch 关键字用于将变量或表达式的值与一组值进行比较。这些值由 case 关键字表示。如果值匹配,则执行 case 后面的语句。有一个可选的 default 语句。如果找不到其他匹配项,则执行它。

每个 case 都可以用 break 终止。如果不是,它会继续执行。

main.dart
void main() {
  final dayOfWeek = DateTime.now().weekday;

  switch (dayOfWeek) {
    case DateTime.sunday:
      print("dies Solis");
      break;

    case DateTime.monday:
      print("dies Lunae");
      break;

    case DateTime.tuesday:
      print("dies Martis");
      break;

    case DateTime.wednesday:
      print("dies Mercurii");
      break;

    case DateTime.thursday:
      print("dies Jovis");
      break;

    case DateTime.friday:
      print("dies Veneris");
      break;

    case DateTime.saturday:
      print("dies Saturni");
      break;
  }
}

该示例确定了一周中的当前日期,并打印其拉丁名称。

switch (dayOfWeek) {
...
}

在圆括号中,switch 关键字接受一个将要被测试的表达式的值。switch 关键字的主体放在一对花括号内。在主体中,我们可以放置多个 case 选项。每个选项都以 break 关键字结尾。

case DateTime.sunday:
  print("dies Solis");
  break;

使用 case 语句,我们测试匹配表达式的值。如果它等于 DateTime.sunday,我们打印拉丁语 dies Solis。

$ dart main.dart
dies Veneris

Dart while 循环

while 语句是一个控制流程语句,允许根据给定的布尔条件重复执行代码。

这是 while 循环的一般形式

while (expression)
{
    statement;
}

while 关键字执行大括号括起来的块内的语句。只要表达式的计算结果为 true,就会执行这些语句。

main.dart
void main() {
  int i = 0;
  int sum = 0;

  while (i < 10) {
    i++;
    sum += i;
  }

  print(sum);
}

在代码示例中,我们计算某个数字范围内值的总和。

while 循环有三个部分。初始化、测试和更新。语句的每次执行都称为一个周期。

int i = 0;

我们初始化 i 变量。它用作计数器。

while (i < 10) {
    ...
}

while 关键字后面的圆括号内的表达式是第二阶段:测试。只要表达式的计算结果为真,循环体内的语句就会被执行。当表达式的计算结果为假时,循环终止。

i++;

这是 while 循环的最后第三个阶段:更新。我们递增计数器。请注意,不正确处理 while 循环可能导致无限循环。

$ dart main.dart
55

Dart 经典 for 循环

经典 for 循环取自 C 编程语言。for 循环也有三个阶段:初始化、条件和代码块执行以及增量。

main.dart
void main() {
  var sum = 0;

  for (int i = 0; i < 10; i++) {
    sum += i;
  }

  print(sum);
}

在此示例中,我们对 0..9 的值进行求和,并将结果打印到控制台。

for (int i = 0; i < 10; i++) { 
  sum += i; 
}

在第一个阶段,我们将计数器 i 初始化为零。此阶段仅执行一次。接下来是条件 i < 10。如果满足条件,则执行 for 代码块内的语句。

在第三个阶段,计数器增加。现在我们重复第 2、3 阶段,直到条件不再满足,然后退出 for 循环。在我们的例子中,当计数器 i 等于 10 时,for 循环停止执行。

Dart for in 循环

for/in 形式使我们能够轻松地遍历可迭代对象。它类似于 forEach 函数。

main.dart
void main() {
  final words = ['sky', 'load', 'cup', 'tea', 'rock', 'plate'];

  for (final word in words) {
    print(word);
  }
}

在示例中,我们定义了一个单词列表。使用 for/in,我们遍历列表并打印所有单词。

$ dart main.dart
sky
load
cup
tea
rock
plate

Dart break 语句

break 语句可用于终止由 whilefor 语句创建的循环的执行。

main.dart
import 'dart:math';

void main() {
  const int MAX = 30;

  while (true) {
    var num = new Random().nextInt(MAX);
    print("$num");

    if (num == 22) {
      break;
    }
  }

  print("\n");
}

我们定义了一个无限 while 循环。我们使用 break 语句来跳出这个循环。我们从 1 到 30 中选择一个随机值。我们打印该值。如果该值等于 22,我们则结束无限 while 循环。

$ dart main.dart
21
4
20
20
22

来源

Dart 循环

在本文中,我们涵盖了 Dart 中的控制流。

作者

我叫 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出 所有 Dart 教程