プログラミングの繰り返し処理とは?3つの構文と使い分ける方法

Mirai

繰り返し処理ってどういう時に使えば良いの?for文以外にもあるの?

Zetto

繰り返し処理を使えば、何百回の処理でも数行で書けるようになるよ。構文を3つ覚えるだけでOKだよ!

この記事では、プログラミングの繰り返し処理の基本から、for文・while文の使い分け方まで解説します。

Zettoのライタープロフィール

本記事の専門性
現役エンジニアのZettoです。Java SilverとJava Goldを取得しており、Javaを使った実務案件を複数経験しています。

繰り返し処理を理解しないままでいると、コードが何倍にも膨れ上がり、修正のたびに何箇所も直す羽目になります。

この記事を読めば、繰り返し処理の仕組み・for文・while文の書き方・現場での使い分けが一通り理解できます。

ぜひ参考にしてみてください。

目次

繰り返し処理とは?プログラミングの基本概念をおさえる

ループ処理とは

繰り返し処理は、プログラミングの土台となる考え方です。

  • 繰り返し処理が必要な理由
  • 順次・分岐・反復|プログラムの3つの処理
  • 繰り返し処理の仕組みをイメージする

順番に確認していきましょう。

繰り返し処理が必要な理由

繰り返し処理を使うと、同じコードを何度も書かなくて済みます。

たとえば「1から100までの数字を全部表示したい」場合、繰り返し処理なしで書くとこうなります。

System.out.println(1);
System.out.println(2);
System.out.println(3);
// … 100行続く

これを繰り返し処理で書くと、わずか3行で完結します。

for (int i = 1; i <= 100; i++) {
    System.out.println(i);
}

コードが短くなるだけでなく、修正も一箇所で済みます。

「1から1000に変えたい」となっても、数字を1か所直すだけです。

繰り返し処理が得意なことは以下の通りです。

  • 同じ処理を決まった回数繰り返す(例:100回ループ)
  • 配列やリストの要素を1件ずつ処理する
  • 条件が満たされるまで処理を継続する

順次・分岐・反復|プログラムの3つの処理

プログラムは、どんなに複雑に見えても3つの処理の組み合わせでできています。

  • 順次処理:コードを上から順番に実行する
  • 分岐処理:条件によって処理を切り替える(if文)
  • 反復処理:同じ処理を繰り返す(for文・while文)

この「反復処理」が、今回テーマにしている繰り返し処理です。

3つの処理を知っておくと、どんなプログラムを読んでも「今どの処理をしているか」がすぐ把握できるようになります。

プログラミングの考え方(順次・分岐・反復の関係)を詳しく知りたい方は、以下の記事もあわせて読んでみてください。繰り返し処理の位置づけが整理されます。

Zetto

3つの処理を押さえておくと、はじめて読むコードでも「なんとなく何をしているか」が読めるようになります。これは実務で地味に大きいメリットですよ。

繰り返し処理の仕組みをイメージする

繰り返し処理のイメージは、スポーツのドリル練習に近いです。

バスケットボールのフリースロー練習で「100本打つまで終わらない」とします。

  • 条件:打った本数が100本未満
  • 処理:フリースローを1本打つ
  • 更新:打った本数を1増やす

プログラムの繰り返し処理も、まったく同じ構造です。

  • 条件:ループを続けるかどうかの判定
  • 処理:毎回実行する内容
  • 更新:条件に影響する値の変化

この3要素がセットになって、繰り返し処理が動きます。

ここまでで繰り返し処理の基本的な考え方がつかめたと思います。次は具体的な構文を見ていきます。

Zetto

「条件・処理・更新」の3つに分解すると、for文もwhile文も同じ構造だとわかります。最初はこのイメージを持っておくだけで、構文の理解がかなり楽になりますよ。

for文の使い方【繰り返し処理の基本構文①】

for文の使い方

繰り返し処理の中でも、最もよく使う構文がfor文です。

  • for文の書き方と実行の流れ
  • 拡張for文(for-each文)の使い方
  • 言語別for文の書き方比較(Java・Python・JavaScript)

それぞれ詳しく解説します。

for文の書き方と実行の流れ

for文は「回数が決まっている繰り返し」に使う構文です。

基本的な書き方(Java)はこうなります。

for (初期化; 条件式; 更新式) {
    // 繰り返す処理
}

具体例で確認します。

for (int i = 0; i < 5; i++) {
    System.out.println(i);
}
// 出力:0, 1, 2, 3, 4

実行の流れは以下の通りです。

  • int i = 0:変数 i を 0 で初期化する
  • i < 5:i が 5 より小さければループを続ける
  • i++:処理が終わるたびに i を 1 増やす

「初期化 → 条件チェック → 処理 → 更新 → 条件チェック → …」という順番で動きます。

Javaのfor文について、実務でよく使うパターンも含めて詳しく解説している記事があります。for文をしっかり使いこなしたい方はあわせて参考にしてください。

Zetto

for文の変数名はよく i が使われますが、意味のある名前にしてもOKです。たとえば配列のインデックスなら index、ユーザー番号なら userId など。読みやすさを意識した命名が、実務では大事になってきますね。

拡張for文(for-each文)の使い方

拡張for文(for-each文)は、配列やリストの全要素を順番に取り出すときに使います。

インデックス(何番目か)を意識せずに書けるので、通常のfor文よりシンプルです。

// 通常のfor文
int[] nums = {10, 20, 30};
for (int i = 0; i < nums.length; i++) {
    System.out.println(nums[i]);
}

// 拡張for文(for-each)
for (int num : nums) {
    System.out.println(num);
}

拡張for文が使える場面の特徴は以下の通りです。

  • 配列・リストの全要素を処理したいとき
  • インデックス番号が不要なとき
  • 要素の追加・削除はしないとき

一方、「3番目の要素だけ特別な処理をしたい」などインデックスが必要な場合は、通常のfor文を使います。

言語別for文の書き方比較(Java・Python・JavaScript)

同じ「1から5まで表示する」処理を、3言語で書き比べます。

Java

for (int i = 1; i <= 5; i++) {
    System.out.println(i);
}

Python

for i in range(1, 6):
    print(i)

JavaScript

for (let i = 1; i <= 5; i++) {
    console.log(i);
}

Pythonは range() を使うので書き方が少し異なりますが、「条件・処理・更新」の考え方はどの言語でも共通しています。

1言語でfor文をしっかり身につければ、他の言語への応用もスムーズに進む傾向があります。

ここまでfor文の基本をひと通り解説しました。次はwhile文とdo-while文を見ていきます。

Zetto

Pythonの range(1, 6) で「なんで6?5じゃないの?」ってなりがちですが、Pythonは終了値を含まない仕様です。これ、最初は誰でも一度はハマるポイントなんですよね(笑)。

while文とdo-while文の使い方【基本構文②③】

while・do-while文

for文だけがプログラミングの繰り返し処理ではありません。

  • while文の書き方と使いどころ
  • do-while文の書き方と特徴
  • for文・while文・do-while文の違いを整理する

ひとつずつ見ていきます。

while文の書き方と使いどころ

while文は「条件が満たされている間、処理を繰り返す」構文です。

// Java
int i = 0;
while (i < 5) {
    System.out.println(i);
    i++;
}
// 出力:0, 1, 2, 3, 4

while文はfor文と似ていますが、回数が事前にわからないときによく使います。

while文が適している場面は以下の通りです。

  • ユーザーが「終了」と入力するまで繰り返す
  • ファイルの終端(EOF)に達するまで読み込む
  • サーバーからのレスポンスが返ってくるまで待機する

「何回ループするか」が決まっていないケースに使うのが、while文の本領です。

do-while文の書き方と特徴

do-while文は、while文の「条件を後から判定する」バージョンです。

// Java
int i = 0;
do {
    System.out.println(i);
    i++;
} while (i < 5);
// 出力:0, 1, 2, 3, 4

while文との最大の違いは「最低1回は必ず実行される」点です。

while文は条件がfalseだと1回も実行されませんが、do-while文は処理を1回実行してから判定します。

使いどころのイメージは「メニューを表示して選択を待ち、不正入力なら再表示する」といったUIのループです。

Zetto

do-while文は実務でも使う場面が多くないですが、「後判定ループ」という概念は知っておいた方がいいと思います。他人のコードに出てきたとき、読めると読めないとでは大きな差が出ますよ。

for文・while文・do-while文の違いを整理する

3つの構文の使い分けを整理します。

| 構文 | 主な使いどころ | 条件判定のタイミング |
|—|—|—|
| for文 | 回数が決まっている | ループ前(前判定) |
| while文 | 回数が不定・条件次第 | ループ前(前判定) |
| do-while文 | 最低1回は必ず実行したい | ループ後(後判定) |

実務では圧倒的にfor文とwhile文を使う頻度が高いです。

まずはfor文とwhile文の使い分けを身につけることに集中するのが、効率のいい学習法だと思います。

ここまでで3つの構文が一通りわかりました。次は現場での選び方と実践パターンを解説します。

Zetto

最初のうちはfor文だけ使えれば8割くらいのケースはカバーできます。while文は「forでうまく書けない…」と感じた場面で使い始めるのが、自然なステップアップの流れかなと。

現場エンジニアが教えるfor文・while文の選び方と実践テクニック

for・while選び方

ここからは実務に直結する選び方と、よく使うパターンを解説します。

  • 回数が決まっているときはfor文を選ぶ
  • 条件が満たされるまで動かすときはwhile文を選ぶ
  • 配列・リストとfor文を組み合わせた実践例
  • break文・continue文で繰り返しを制御する

さっそく見ていきましょう。

回数が決まっているときはfor文を選ぶ

「何回繰り返すかが明確なとき」はfor文一択です。

// 5回 "Hello!" を表示する
for (int i = 0; i < 5; i++) {
    System.out.println("Hello!");
}

「配列の全要素を処理する」も、要素数が固定されているのでfor文が適しています。

迷ったら「ループ回数をコードを書く前に言えるか?」と自問してみてください。言えるならfor文、言えないならwhile文、と判断するとシンプルです。

条件が満たされるまで動かすときはwhile文を選ぶ

「繰り返す回数が事前にわからないとき」はwhile文が向いています。

// ユーザーが "exit" を入力するまでループ
Scanner scanner = new Scanner(System.in);
String input = "";
while (!input.equals("exit")) {
    System.out.println("コマンドを入力してください:");
    input = scanner.nextLine();
}

while文でよく使うパターンは以下の通りです。

  • 外部からの入力に応じてループを終了する
  • データベースのレコードを全件処理する
  • ゲームのメインループ(プレイヤーが終了するまで継続)
Zetto

「forかwhileか」で迷うときは「回数を先に言えるか?」という問いが一番効きます。僕も実際にこの問いをコードを書く前に必ず自問していますね。

配列・リストとfor文を組み合わせた実践例

実務で最もよく使うのが、配列・リストとfor文の組み合わせです。

1次元配列をfor文でループする

配列の全要素を順番に処理する基本パターンです。

int[] scores = {80, 60, 95, 72, 88};

for (int i = 0; i < scores.length; i++) {
    System.out.println("点数:" + scores[i]);
}

scores.length で配列の要素数を取得できるので、直接数字をコードに書かずに済みます。

配列の宣言・初期化・操作については、以下の記事でまとめています。for文と組み合わせて理解を深めたい方はぜひ参考にしてください。

多重ループ(ネストしたfor文)の使い方

for文の中にfor文を入れると、2次元的なデータを処理できます。

// 九九の一部を表示(3×3)
for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 3; j++) {
        System.out.print(i * j + " ");
    }
    System.out.println();
}
// 出力:
// 1 2 3
// 2 4 6
// 3 6 9

多重ループは「表データ・行列・グリッドの処理」によく登場します。

3重以上のネストは読みにくくなりがちです。可能な限りメソッドに切り出すのが現場のコツです。

break文・continue文で繰り返しを制御する

ループ処理をより細かくコントロールするのが、break文とcontinue文です。

break文で繰り返しを途中で終わらせる

break文は「ループを即座に終了させる」命令です。

for (int i = 0; i < 10; i++) {
    if (i == 5) {
        break; // i が 5 になったらループ終了
    }
    System.out.println(i);
}
// 出力:0, 1, 2, 3, 4

「配列の中から条件に合う要素を見つけたら、以降の処理は不要」というケースで使います。

continue文で特定の処理をスキップする

continue文は「今回の繰り返しだけスキップして、次の繰り返しに進む」命令です。

for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) {
        continue; // 偶数はスキップ
    }
    System.out.println(i);
}
// 出力:1, 3, 5, 7, 9

「特定の条件に一致した要素だけ除外したい」ときにcontinue文が役立ちます。

Zetto

break文とcontinue文は最初は混乱しがちですが、「breakはループ全体を終わらせる」「continueは今回だけスキップする」と覚えればシンプルです。名前の通りの動作なので、イメージしやすいですよ。

繰り返し処理でよくあるバグと対処法

ループバグ対処法

ここからは実務でよく遭遇するバグについて解説します。

  • 無限ループの原因と防ぎ方
  • 境界値エラー(インデックスの範囲外)の防ぎ方
  • パフォーマンスを意識したループの書き方

無限ループの原因と防ぎ方

無限ループは、繰り返し処理でよく起きるバグのひとつです。

終了条件が永遠に満たされないと、プログラムが止まらなくなります。

// 無限ループの例(i++ を書き忘れた)
int i = 0;
while (i < 5) {
    System.out.println(i);
    // i++ を書き忘れると i がずっと 0 のまま → 永遠にループ
}

無限ループを防ぐポイントは以下の通りです。

  • while文では必ず条件に関わる変数を更新する
  • for文の更新式(i++ など)を省略しない
  • 終了条件が本当に達成できる値になっているか確認する

無限ループが起きたときは、プログラムを強制終了(Ctrl+C など)してから原因を調べましょう。

境界値エラー(インデックスの範囲外)の防ぎ方

配列のインデックスは「0から始まる」というルールがあります。

長さ5の配列なら、インデックスは 0〜4 です。array[5] にアクセスしようとすると、範囲外エラー(IndexOutOfBoundsException)が発生します。

int[] nums = {10, 20, 30, 40, 50}; // 要素数5
System.out.println(nums[5]); // エラー(最後のインデックスは4)

防ぐポイントは以下の通りです。

  • i < array.length と書く(i <= array.length はNG)
  • 最後の要素へのアクセスは array[array.length – 1] を使う
  • 繰り返し処理を書いたら、最初と最後の要素でテストする

境界値エラーは実行時に発生するため、コンパイルでは気づきにくいです。意識的に確認する習慣をつけておきましょう。

パフォーマンスを意識したループの書き方

ここまでで、実務でよく使うパターンと注意点が一通り押さえられました。

Zetto

インデックスエラーは実務でも出ることがあります。「array.length – 1 が最後の要素」と体に染み込ませるだけで、このバグはかなり防げます。テストでも境界値を忘れずに確認する癖をつけておくといいですね。

繰り返し処理に関するよくある質問(FAQ)

ループFAQ

よくある質問と回答をまとめました。

Q:for文とwhile文はどちらを先に覚えればいいですか?

for文から先に学ぶのがおすすめです。

for文は「何回繰り返すか」が明確なため、コードの動作を追いやすいです。

for文で繰り返し処理の感覚をつかんでから、「回数が決まらない場合」としてwhile文を学ぶ流れが、理解しやすい傾向があります。

Q:繰り返し処理はどのプログラミング言語から学べばいいですか?

どの言語から学んでも構いませんが、初心者にはPythonかJavaが向いている場合が多いです。

Pythonはシンプルなシンタックスでforループが書きやすく、Javaは型の概念を含めて繰り返し処理の構造を体系的に理解しやすいです。

プログラミング言語の種類と選び方については、以下の記事でまとめています。自分に合った言語を選ぶ参考にしてみてください。

Q:繰り返し処理をマスターしたら次は何を学べばいいですか?

配列・リスト・メソッドの学習に進むのがおすすめです。

繰り返し処理は「配列の全要素を処理する」「メソッドを繰り返し呼び出す」場面で頻繁に使います。配列とメソッドを合わせて学ぶと、できることが一気に広がります。

繰り返し処理をマスターして、コードの世界を広げよう

ループ処理習得

今回はプログラミングの繰り返し処理について、基本から実践テクニックまで解説しました。

この記事で押さえてほしいポイントは以下の通りです。

  • 繰り返し処理は「条件・処理・更新」の3要素で成り立つ
  • 回数が決まっているときはfor文、回数が不定のときはwhile文を選ぶ
  • 配列とfor文の組み合わせは実務で最もよく使うパターン
  • break・continue文でループをより細かくコントロールできる
  • 無限ループと境界値エラーは、書く前から意識して防ぐ

繰り返し処理を理解すると「データの全件処理」「集計処理」「ユーザー入力のループ」など、実用的なプログラムが書けるようになります。

エンジニアとして必要なスキルを体系的に身につけたい方は、以下のロードマップ記事も参考にしてみてください。「次に何を学べばいいか」が整理されているので、学習の方向性を確認できます。

Mirai

for文とwhile文の使い分けがスッキリわかった!breakとcontinueも早速使ってみる!

Zetto

繰り返し処理を覚えると、コードで「自動化」できることが一気に増えるよ。配列と組み合わせる練習をすると、さらに実感できるはず!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次