Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】【C#】for と foreach どっちを使うべき?

2025年10月02日に「Qiita」が公開したITニュース「【C#】for と foreach どっちを使うべき?」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

C#の`for`ループは、インデックスを使って要素にアクセスする昔ながらの構文。配列の何番目の要素かといったインデックス情報が必要な場合に特に便利に使える。

ITニュース解説

プログラミングにおいて、繰り返し同じ処理を行うことは非常に多い。例えば、ユーザーのリスト全員にメールを送ったり、商品の在庫データを一つずつチェックしたりといった場面がそれに当たる。C#のようなプログラミング言語では、このような繰り返し処理を効率的に記述するための「ループ構文」が提供されており、その中でも特に基本となるのがforループとforeachループだ。今回のニュース記事では、その二つのうち、特にforループの特徴と使いどころに焦点を当てて解説している。システムエンジニアを目指す初心者にとって、これらのループ構文を適切に使いこなすことは、効率的で堅牢なプログラムを作成するための第一歩となる。

forループは「昔ながらのループ構文」と紹介されているが、これは多くのプログラミング言語で非常に基本的な繰り返し処理の手段として古くから使われていることを意味する。その最大の特徴は、インデックス(添字)を使って要素にアクセスする点にある。インデックスとは、配列やリストのようなデータの集まり(コレクション)の中にある個々の要素が、どの位置にあるかを示す番号のことだ。通常、ほとんどのプログラミング言語では0から始まる整数値で表される。例えば、5つの要素を持つ配列であれば、最初の要素はインデックス0、次の要素はインデックス1、といった具合に続き、最後の要素はインデックス4になる。

forループはこのインデックスを自分で管理しながら、繰り返し処理を行う。ニュース記事の例にあるfor (int i = 0; i < arr.Length; i++)という構文を見ると、その仕組みがよくわかる。 この構文は大きく三つの部分に分かれている。

まず、int i = 0;の部分は「初期化式」と呼ばれる。ここでは、ループの回数を数えるための変数iを宣言し、初期値として0を設定している。このiが、配列やリストのインデックスとして使われることになる。多くの繰り返し処理は最初の要素から始まるため、インデックスの初期値として0が設定されるのが一般的だ。

次に、i < arr.Length;の部分は「条件式」と呼ばれる。この条件式が真(true)である限り、ループの中の処理が実行される。arr.Lengthは、arrという配列(またはリスト)が持つ要素の総数を表すプロパティだ。例えば、配列arrに5つの要素があれば、arr.Lengthは5になる。この条件式i < arr.Lengthは、「変数iが配列の要素数よりも小さい間はループを続ける」という意味になる。これにより、iが0から4までの間、つまり配列の全てのインデックスに対して処理が行われ、iが5になった時点で条件が偽(false)となり、ループが終了する。この条件式は、配列の範囲を超えてアクセスしてしまう「インデックス範囲外エラー」を防ぐ上で非常に重要だ。

最後に、i++の部分は「更新式」と呼ばれる。これは、ループが1回実行されるごとに、変数iの値を1つ増やす(インクリメントする)ことを意味する。この更新式によって、iの値は0、1、2、…と順番に増えていき、次の要素のインデックスを指すようになる。

これらの三つの要素が連携することで、forループは配列やリストの各要素に順番にアクセスし、指定された処理を繰り返すことができる。

ニュース記事では、「インデックスが必要なときに便利」とforループの利点が挙げられているが、これはforループの最も強力な特徴だ。具体的にどのような場合に便利なのかをいくつか説明しよう。

一つ目は、まさに記事の例のように、要素そのものだけでなく「何番目の要素か」という情報も一緒に表示したり、利用したりしたい場合だ。例えば、Console.WriteLine($"{i}...")というコードは、現在のインデックスiの値をメッセージの一部として出力している。このように、要素の順番(インデックス)が処理内容に関わる場合には、forループは非常に直感的で使いやすい。

二つ目は、配列やリストの要素を逆順に処理したい場合だ。例えば、for (int i = arr.Length - 1; i >= 0; i--)のように初期化式、条件式、更新式を変更すれば、配列の最後の要素から最初の要素へと遡って処理を進めることができる。foreachループでは通常、このような逆順処理は直接サポートされていないため、forループの柔軟性が際立つ場面だ。

三つ目は、配列やリストの一部分だけを処理したい場合だ。例えば、最初の3つの要素だけを処理したいならfor (int i = 0; i < 3; i++)とすればよいし、5番目の要素から最後までを処理したいなら、初期化式をint i = 4;(インデックスは0から始まるため)に変更すれば簡単に実現できる。インデックスを直接操作できるforループならではのメリットと言える。

四つ目は、偶数番目の要素だけ、あるいは奇数番目の要素だけを処理したい場合だ。この場合も、更新式をi += 2のように変更することで、インデックスを2つ飛ばしで処理することが可能になる。

五つ目は、複数の配列やリストを同じインデックスで同時に処理したい場合だ。例えば、商品名が入った配列と、対応する価格が入った配列が別々に存在し、それらを組み合わせて表示したいときに、同じiというインデックスを使って両方の配列からデータを取得することができる。

このように、forループはインデックスを細かく制御できるため、処理の範囲や順序を柔軟に設定する必要がある場合に非常に強力なツールとなる。システムエンジニアとしてプログラムを設計する際には、コレクションの全要素を順番に処理するだけで良いのか、それとも特定の要素のインデックス情報が必要なのか、あるいは処理の順序や範囲に特殊な要件があるのかをよく考える必要がある。

ニュース記事のタイトルにあるforforeachのどちらを使うべきかという問いに対しては、このforループが持つインデックスによる細かな制御能力が、一つの大きな判断基準となる。インデックス自体が不要で、単にコレクションの全ての要素を最初から最後まで順に処理したいだけであれば、foreachループの方が簡潔に記述できることが多い。しかし、この記事で解説されたような、インデックスが処理の要となる場面では、forループがその真価を発揮する。

プログラミングの学習を進める中で、これらの基本的なループ構文がどのように動作し、どのような状況で最も効果的に使えるのかを理解することは、複雑なシステムを構築するための土台となる。forループが提供するインデックスを通じた強力な制御は、今後多様なプログラミングタスクで役立つはずだ。

関連コンテンツ