目次

ループ

このページでは、ループとサポートステートメントを使用して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();
}

出力は期待通り、0、次に1となります。対照的に、JavaScriptではこの例は2、次に2と出力されます。

ListSetのようなIterable型を反復処理する場合、現在の反復カウンタを知る必要がない場合があります。その場合は、よりクリーンなコードのために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());