3秒でわかる
同じ処理を条件が続く間くり返す制御構造。for と while が代表で、件数の分からないデータをまとめて処理するときの土台になります。
30秒図解
もう少し詳しく
どういうものか
反復は、同じ処理を何度もくり返し実行する制御構造です。ループとも呼ばれます。代表は 2 つあり、くり返す回数や対象がはじめから決まっているときの for、終了条件だけが決まっていて何回まわるか分からないときの while です。
for は「リストの全要素に対して」「0 から 9 まで」のように対象が確定している場面に向きます。while は「ユーザーが正しい値を入れるまで」「残高が 0 になるまで」のように、何回で終わるか事前に計算できない場面に向きます。
なぜ必要か
処理するデータの件数は、コードを書く時点では分かりません。ユーザーが 3 人のときもあれば 3 万人のときもあります。反復を使わずに同じ行をコピーして並べる書き方は、件数が変わった瞬間に破綻します。
もうひとつは、変更が 1 か所で済むことです。100 行のコピーに同じバグがあれば 100 か所直す必要がありますが、ループなら本体の 1 か所だけを直せば全件に反映されます。
具体例
同じ集計を Python と Java で書きます。件数が増えてもコードは変わりません。
scores = [72, 88, 95, 60, 81]
total = 0
for s in scores: # 対象が決まっているので for
total += s
print(total / len(scores)) # 79.2
# 終了条件だけが決まっている場合は while
n = 1000
digits = 0
while n > 0:
n //= 10
digits += 1
print(digits) # 4int[] scores = {72, 88, 95, 60, 81};
int total = 0;
for (int s : scores) {
total += s;
}
System.out.println((double) total / scores.length); // 79.2つまずきやすいところ
while の中で条件に使う変数を更新し忘れ、無限ループになる。プログラムが返ってこないときは、まず条件に出てくる変数がループ内で変化しているか確認しますrange(1, 5) は 5 を含みません似た用語との違い
反復と再帰はどちらもくり返しですが、反復は同じ関数の中でカウンタを進め、再帰は自分自身を呼び出して段を深くします。多くの言語では反復のほうが速く、スタック溢れの心配もありません。
覚え方
回数が読めるなら for、条件が尽きるまでなら while。この振り分けだけで、日常のループはほぼ書けます。