Dartの繰り返し処理には、回数が決まっているときのfor、リストを順番に回すfor-in、条件が続く間くり返すwhile、最低1回実行するdo-whileがあります。FlutterではListのデータからWidgetを作るときに繰り返しの考え方をよく使います。
この記事の結論
回数が決まっているなら通常のfor、リストの中身を順番に使うならfor-in、終了条件だけが決まっているならwhileを選びます。まずはこの3つとbreak/continueを押さえれば十分です。
基本のfor文
カウンターを増やしながら決まった回数だけ処理を繰り返します。
for (var i = 0; i < 3; i++) {
print(i);
}
for-inでListを回す
Listの要素を順番に取り出すだけなら、インデックスを使わないfor-inが読みやすいです。
final names = ["Sato", "Suzuki", "Tanaka"];
for (final name in names) {
print(name);
}
whileで条件が続く間くり返す
回数ではなく「条件がtrueの間」くり返したいときはwhileを使います。条件がfalseにならないと無限ループになるので、必ず状態を変化させます。
var count = 0;
while (count < 3) {
print(count);
count++;
}
do-whileで最低1回実行する
条件の判定が後ろにあるため、中身が必ず1回は実行されます。入力を受け取ってから判定する場面に向きます。
var input = "";
do {
input = readInput();
} while (input.isEmpty);
breakとcontinue
breakでループを途中で抜け、continueでその回だけスキップします。
for (final n in [1, 2, 3, 4, 5]) {
if (n == 4) break; // 4で終了
if (n.isEven) continue; // 偶数はスキップ
print(n); // 1, 3
}
FlutterでWidgetリストへ変換する
実際のFlutterでは、明示的なforよりmapでListをWidgetのListへ変換する書き方をよく使います。
final widgets = names.map((name) => Text(name)).toList();
実装後に確認すること
- 回数固定ならfor、条件依存ならwhileを選べているか
- whileで状態を更新し、無限ループを避けているか
- 単純なList処理はmapやwhereで書けないか検討したか
- Flutterで一覧を作るときの変換方法を説明できるか
よくあるつまずき
- whileの条件を更新し忘れて無限ループになる
- for文のオフバイワン(<と<=の取り違え)で1件多い/少ない
- breakとcontinueの挙動を取り違える
- mapで済む変換を無理にforで書いて読みにくくする
次に読む記事
- Dart Listの使い方|追加・取得・map・whereの基本 — DartのListを初心者向けに解説します。追加、取得、ループ、map、where、Flutterで一覧表示へつなげる基本を整理します。
- Dartのデータ型|int・double・String・bool・null安全を初心者向けに解説 — Dartの基本データ型を初心者向けに解説します。int、double、String、bool、List、Map、null安全、型推論の使い分けを確認します。
- Dart async awaitの使い方|Futureを順番に待つ基本を初心者向けに解説 — Dartのasync/awaitを初心者向けに解説します。Futureとthenの関係、awaitで待つ書き方、try-catch、Future.wait、Flutterでローディング表示につなげる考え方を整理します。
まとめ
Dartの繰り返しは、for・for-in・while・do-whileの使い分けとbreak/continueで整理できます。単純なList処理はmapやwhereも検討しつつ、FlutterのWidgetリスト作成へつなげましょう。