迴圈
本頁面展示瞭如何使用迴圈和相關語句來控制 Dart 程式碼的流程。
for迴圈while和do while迴圈break和continue
您還可以使用以下方式在 Dart 中操縱控制流:
for 迴圈
#您可以使用標準的 for 迴圈進行迭代。例如:
var message = StringBuffer('Dart is fun');
for (var i = 0; i < 5; i++) {
message.write('!');
}Dart 的 for 迴圈內的閉包捕獲索引的值。這避免了 JavaScript 中常見的陷阱。例如,考慮以下情況:
var callbacks = [];
for (var i = 0; i < 2; i++) {
callbacks.add(() => print(i));
}
for (final c in callbacks) {
c();
}輸出是 0 然後是 1,符合預期。相比之下,該示例在 JavaScript 中會列印 2 然後是 2。
有時,當迭代 Iterable 型別(例如 List 或 Set)時,您可能不需要知道當前的迭代計數器。在這種情況下,使用 for-in 迴圈可以使程式碼更簡潔:
for (var candidate in candidates) {
candidate.interview();
}在前面的示例迴圈中,candidate 在迴圈體中定義,並被設定為一次引用 candidates 中的一個值。candidate 是一個區域性變數。在迴圈體內部重新分配 candidate 只會更改該迭代的區域性變數,而不會修改原始的 candidates 可迭代物件。
要處理從可迭代物件獲得的值,您還可以在 for-in 迴圈中使用模式:
for (final Candidate(:name, :yearsExperience) in candidates) {
print('$name has $yearsExperience of experience.');
}可迭代類還具有 forEach() 方法作為另一種選擇:
var collection = [1, 2, 3];
collection.forEach(print); // 1 2 3while 和 do-while 迴圈
#while 迴圈在迴圈之前評估條件:
while (!isDone()) {
doSomething();
}do-while 迴圈在迴圈之後評估條件:
do {
printLine();
} while (!atEndOfPage());break 和 continue
#使用 break 來停止迴圈:
while (true) {
if (shutDownRequested()) break;
processIncomingRequests();
}使用 continue 跳到下一個迴圈迭代:
for (int i = 0; i < candidates.length; i++) {
var candidate = candidates[i];
if (candidate.yearsExperience < 5) {
continue;
}
candidate.interview();
}如果您正在使用 Iterable(例如列表或集合),則編寫前面的示例的方式可能有所不同:
candidates
.where((c) => c.yearsExperience >= 5)
.forEach((c) => c.interview());標籤
#標籤是一個識別符號,後跟冒號(labelName:),您可以將其放置在語句之前以建立帶標籤的語句。迴圈和 switch 情況常被用作帶標籤的語句。帶標籤的語句可以在 break 或 continue 語句中引用,如下所示:
break labelName;終止帶標籤語句的執行。當您位於巢狀迴圈中時,這對於跳出特定的外部迴圈很有用。continue labelName;跳過帶標籤語句迴圈當前迭代的其餘部分,並繼續進行下一次迭代。
標籤用於管理控制流。它們常與迴圈和 switch 情況一起使用,允許您指定要跳出或繼續執行哪個語句,而不是預設情況下隻影響最內層迴圈。
在 for 迴圈中使用 break 的標籤
#以下程式碼演示了在帶有 break 語句的 for 迴圈中使用名為 outerLoop 的標籤:
outerLoop:
for (var i = 1; i <= 3; i++) {
for (var j = 1; j <= 3; j++) {
print('i = $i, j = $j');
if (i == 2 && j == 2) {
break outerLoop;
}
}
}
print('outerLoop exited');在前面的示例中,當 i == 2 且 j == 2 時,break outerLoop; 語句停止了內部和外部迴圈。因此,輸出為:
i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 1
i = 2, j = 2
outerLoop exited在 for 迴圈中使用 continue 的標籤
#以下程式碼演示了在帶有 continue 語句的 for 迴圈中使用名為 outerLoop 的標籤:
outerLoop:
for (var i = 1; i <= 3; i++) {
for (var j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
continue outerLoop;
}
print('i = $i, j = $j');
}
}在前面的示例中,當 i == 2 且 j == 2 時,continue outerLoop; 跳過了 i = 2 的剩餘迭代並移動到 i = 3。因此,輸出為:
i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 1
i = 3, j = 1
i = 3, j = 2
i = 3, j = 3在 while 迴圈中使用 break 的標籤
#以下程式碼演示了在帶有 break 語句的 while 迴圈中使用名為 outerLoop 的標籤:
var i = 1;
outerLoop:
while (i <= 3) {
var j = 1;
while (j <= 3) {
print('i = $i, j = $j');
if (i == 2 && j == 2) {
break outerLoop;
}
j++;
}
i++;
}
print('outerLoop exited');在前面的示例中,當 i == 2 且 j == 2 時,程式會跳出內部和外部 while 迴圈。因此,輸出為:
i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 1
i = 2, j = 2
outerLoop exited在 while 迴圈中使用 continue 的標籤
#以下程式碼演示了在帶有 continue 語句的 while 迴圈中使用名為 outerLoop 的標籤:
var i = 1;
outerLoop:
while (i <= 3) {
var j = 1;
while (j <= 3) {
if (i == 2 && j == 2) {
i++;
continue outerLoop;
}
print('i = $i, j = $j');
j++;
}
i++;
}在前面的示例中,當 i = 2 且 j = 2 時,迭代被跳過,迴圈直接移動到 i = 3。因此,輸出為:
i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 1
i = 3, j = 1
i = 3, j = 2
i = 3, j = 3在 do-while 迴圈中使用 break 的標籤
#以下程式碼演示了在帶有 break 語句的 do while 迴圈中使用名為 outerLoop 的標籤:
var i = 1;
outerLoop:
do {
var j = 1;
do {
print('i = $i, j = $j');
if (i == 2 && j == 2) {
break outerLoop;
}
j++;
} while (j <= 3);
i++;
} while (i <= 3);
print('outerLoop exited');在前面的示例中,當 i == 2 且 j == 2 時,程式會跳出內部和外部迴圈。因此,輸出為:
i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 1
i = 2, j = 2
outerLoop exited在 do-while 迴圈中使用 continue 的標籤
#以下程式碼演示了在帶有 continue 語句的 do while 迴圈中使用名為 outerLoop 的標籤:
var i = 1;
outerLoop:
do {
var j = 1;
do {
if (i == 2 && j == 2) {
i++;
continue outerLoop;
}
print('i = $i, j = $j');
j++;
} while (j <= 3);
i++;
} while (i <= 3);在前面的示例中,迴圈跳過了 i = 2 且 j = 2 的迭代,並直接移動到 i = 3。因此,輸出為:
i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 1
i = 3, j = 1
i = 3, j = 2
i = 3, j = 3