內容

此頁面說明如何使用迴圈和支援陳述式來控制 Dart 程式碼的流程

  • for 迴圈
  • whiledo while 迴圈
  • breakcontinue

您也可以使用以下方式在 Dart 中控制流程

  • 分支,例如 ifswitch
  • 例外,例如 trycatchthrow

For 迴圈

#

您可以使用標準 for 迴圈進行反覆運算。例如

dart
var message = StringBuffer('Dart is fun');
for (var i = 0; i < 5; i++) {
  message.write('!');
}

Dart 的 for 迴圈內的封閉會擷取索引的。這避免了 JavaScript 中常見的陷阱。例如,請考慮

dart
var callbacks = [];
for (var i = 0; i < 2; i++) {
  callbacks.add(() => print(i));
}

for (final c in callbacks) {
  c();
}

輸出為預期的 01。相反,這個範例會在 JavaScript 中印出 22

有時在反覆運算 Iterable 類型(例如 ListSet)時,您可能不需要知道目前的反覆運算計數器。在這種情況下,請使用 for-in 迴圈以獲得更簡潔的程式碼

dart
for (final candidate in candidates) {
  candidate.interview();
}

若要處理從 iterable 取得的值,您也可以在 for-in 迴圈中使用 模式

dart
for (final Candidate(:name, :yearsExperience) in candidates) {
  print('$name has $yearsExperience of experience.');
}

Iterable 類別也有 forEach() 方法作為另一個選項

dart
var collection = [1, 2, 3];
collection.forEach(print); // 1 2 3

While 和 do-while

#

while 迴圈會在迴圈之前評估條件

dart
while (!isDone()) {
  doSomething();
}

do-while 迴圈會在迴圈之後評估條件

dart
do {
  printLine();
} while (!atEndOfPage());

Break 和 continue

#

使用 break 來停止迴圈

dart
while (true) {
  if (shutDownRequested()) break;
  processIncomingRequests();
}

使用 continue 來跳到下一個迴圈反覆運算

dart
for (int i = 0; i < candidates.length; i++) {
  var candidate = candidates[i];
  if (candidate.yearsExperience < 5) {
    continue;
  }
  candidate.interview();
}

如果您使用 Iterable(例如清單或集合),撰寫前一個範例的方式可能會有所不同

dart
candidates
    .where((c) => c.yearsExperience >= 5)
    .forEach((c) => c.interview());