ループ
このページでは、ループとサポートステートメントを使用して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
と出力されます。
List
やSet
のようなIterable
型を反復処理する場合、現在の反復カウンタを知る必要がない場合があります。その場合は、よりクリーンなコードのためにfor-in
ループを使用します。
for (final candidate in candidates) {
candidate.interview();
}
iterableから取得した値を処理するには、for-in
ループでパターンを使用することもできます。
for (final Candidate(:name, :yearsExperience) in candidates) {
print('$name has $yearsExperience of experience.');
}
Iterableクラスには、別のオプションとしてforEach()メソッドもあります。
var collection = [1, 2, 3];
collection.forEach(print); // 1 2 3
whileと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());
特に明記されていない限り、このサイトのドキュメントはDart 3.5.3を反映しています。ページは2024年6月10日に最終更新されました。 ソースを表示 または 問題を報告する。