同じコードをたくさん書くのをやめたい、どうしたらいいの?
forを使ったサンプルコードが知りたい
こんにちは。文系出身で現役8年目エンジニアの佐藤です。
みなさんはC#でプログラミングするとき、「for文」を使って繰り返し処理が出来ていますか? 同じコードを繰り返し書くのは大変ですし、ミスの原因にもなりかねません。
この記事では「C#でのfor文を使った繰り返し処理」について解説していきます。
また、「そもそも繰り返し処理とは何か?」という点についても解説しますのでプログラミングを始めたばかりの方も是非最後までご覧ください。
それでは早速「for文」の概要から見ていきましょう。
C#のfor文とは?
この章ではfor文の概要について解説していきます。始めたばかりの方は、まずはここから理解していきましょう!
そもそも繰り返し処理(ループ)とは
プログラミングをしていると、同じ処理を指定した回数繰り返したいという時が良くあります。
例えば次のようなコードを見てみましょう。
namespace test { class Program { static void Main(string[] args) { int i = 0; i = i + 1; i = i + 2; i = i + 3; i = i + 4; i = i + 5; i = i + 6; i = i + 7; i = i + 8; i = i + 9; i = i + 10; System.Console.WriteLine(i); System.Console.ReadKey(); } } }
実行結果:
55
変数 i に1~10の数値を順番に足していきました。今回は10個なので手作業でも書くことが出来ますが、これが100回、1000回となったらどうでしょう?
修正が発生し、1から足し始めるのではなく50から足し始めなくてはならなくなったら……? さすがに手作業で書くのは大変ですし、書き間違いによるミスが発生する可能性も高まりますよね。
これを解消するのが、繰り返し処理(ループ)です。
今回解説する「for」は繰り返し処理の基本ですが、他にも「while」などを使っても繰り返し処理が出来ます。for以外でよく使うものは、後ほど紹介していきます。
プログラミングでは、同じ処理をなるべく書かないようにするのがポイントです。繰り返し(ループ)を駆使して、同じコードを書かないよう、工夫してプログラミングをしていきましょう。
次に、for文はどんな仕組みで繰り返し処理をしてくれるのか解説していきます。
for文の仕組み
「for」は、こちらが指定した回数繰り返し処理を実行してくれるものです。
基本の文法
for(回数を格納する用の変数 = 始まりの値; 繰り返しが続く条件; カウントアップする数)
{
繰り返したい処理を記述…
}
例えば、次のように書いたとします。
for(int r = 1; r <= 10; r++) { }
このfor文の意味は以下の通りです。
- rは1から始まる
- rが10以下の間は繰り返し続ける
- rは1ずつ増える
これを動かしてみると、rは1ずつ増えていくので11回目の繰り返しで11になりますよね。11は繰り返しが続く条件を満たしていないので、10回で繰り返しは終了ということになります。
繰り返し処理の概要と、forの仕組みが何となくわかったところで、次は具体的な使い方について見ていきましょう。
C#でのfor文の使い方
この章では、for文の使い方について解説していきます。
基本の書き方
基本の書き方はとっても簡単です。さっそく、forを使って先ほどのサンプルコードをスッキリさせてみましょう。
namespace test { class Program { static void Main(string[] args) { int i = 0; for(int r = 1; r <= 10; r++) { i = i + r; } System.Console.WriteLine(i); System.Console.ReadKey(); } } }
実行結果:
55
先ほど、for文の仕組みで解説したのと同じものを使っています。
for(int r = 1; r <= 10; r++) { i = i + r; }
このforは次のような意味でしたね。
- rは1から始まる
- rが10以下の間は繰り返し続ける
- rは1ずつ増える
そして、繰り返してもらいたい処理は「i = i + r」です。繰り返していく中を具体的に見ていくと、1回目は「i = i + 1」、2回目は「i = i + 2」…となりますよね。
つまり、最初の章で紹介したコードと同じ処理ということになります。コピーして貼り付けすればサンプルコードはすぐに実行できますので、実際に動かして答えが同じになる様子を確認してみてくださいね。
次に、for文の応用的な使い方について紹介していきます。
1ずつ減るfor文を書く方法
基本で紹介した文は「1ずつ増える」という条件でしたが、状況によっては「1ずつ減る」条件で繰り返したい時もあるでしょう。
そんな時は「r++」と書いてあるところを「r–」としてみてください。
namespace test { class Program { static void Main(string[] args) { int i = 0; for(int r = 20; r >= 10; r--) { i = i + r; } System.Console.WriteLine(i); System.Console.ReadKey(); } } }
実行結果:
165
こうすると、rが始まりの値から1ずつ減っていきます。状況に合わせて使い分けてみましょう。
増える・減る数を指定して書く方法
1ずつじゃなくて、2ずつ増やしたいという時も、あるかもしれません。
そんな時はr++やr–を書いたところに、式を直接書いてしまいます。
namespace test { class Program { static void Main(string[] args) { int i = 0; for (int r = 1; r <= 10; r = r + 2) { i = i + r; System.Console.WriteLine("rの値:" + r); } System.Console.WriteLine("iの答え:" + i); System.Console.ReadKey(); } } }
実行結果:
rの値:1 rの値:3 rの値:5 rの値:7 rの値:9 iの答え:25
実行した時、rの値が分かりやすいようにコンソールにrの値も表示させました。rが1から2ずつ増えているのが分かりますよね。こちらも状況に合わせて使い分けてみてください。
ループを途中でやめる方法|break
繰り返し処理に少し慣れてきた方は、ループの中にif文を入れ込んで判定を繰り返し行うというコードを書いている方もいらっしゃるでしょう。ループの中に条件分岐を入れ込むのもプログラミングの中では非常に多く行われる書き方です。
そんな時「この条件に当てはまったら繰り返しを途中でやめたいな…」という状況になることもあります。
そういう時には「break」を使ってみましょう。
サンプルコードでは、rが4になったらループを途中でやめています。
namespace test { class Program { static void Main(string[] args) { int i = 0; for (int r = 1; r <= 10; r++) { i = i + r; System.Console.WriteLine("rの値:" + r); if (r == 4) { break; } } System.Console.WriteLine("iの答え:" + i); System.Console.ReadKey(); } } }
実行結果:
rの値:1 rの値:2 rの値:3 rの値:4 iの答え:10
1~4まででfor文が終わっているのがわかります。
if文との併用でよく使われるので、for文に慣れてきたらこちらも覚えてみましょう。
次のループに強制的に移る方法|continue
「この条件に当てはまったら、すぐに次のループへ移りたいな…」そんな時には「continue」を使いましょう。先程紹介した「break」と違うのは、ループを中断しないという点です。
次のサンプルコードは「5」の時は足し算をせず次のループへ移るものです。
namespace test { class Program { static void Main(string[] args) { int i = 0; for (int r = 1; r <= 10; r++) { if (r == 5) { continue; } i = i + r; System.Console.WriteLine("rの値:" + r); } System.Console.WriteLine("iの答え:" + i); System.Console.ReadKey(); } } }
実行結果:
rの値:1 rの値:2 rの値:3 rの値:4 rの値:6 rの値:7 rの値:8 rの値:9 rの値:10 iの答え:50
実行結果を見てみると、rが5の時がありませんよね。結果も5少ない50となっています。
「continue」も「break」と一緒に、慣れてきたら使えるようになるとプログラミングの幅が広がりますので、ぜひ習得してみてください。
次の章では、for文以外でループする方法について簡単に紹介していきます。
for文以外でループする方法
for文以外にもループさせる方法があります、forだと実現できない条件の時にはこちらも試してみてください。
while文
whileは「条件が満たされている間ループ」してくれます。
次のサンプルコードは「iが0より大きい間ループ」する処理です。
namespace test { class Program { static void Main(string[] args) { int i = 10; while(i > 0) { i = i - 1; System.Console.WriteLine("iの値:" + i); } System.Console.ReadKey(); } } }
実行結果:
iの値:9 iの値:8 iの値:7 iの値:6 iの値:5 iの値:4 iの値:3 iの値:2 iの値:1 iの値:0
iが0になった時点でループが終わっていますよね。whileはforと違って、繰り返しの回数が決まっていないときによく使われます。
forとwhileのどちらかが使えればよいというより、どちらも状況に合わせて使い分けていけるようになるのが理想的です。
foreach文
foreachはforと似ていますが、コレクションの要素分ループしてくれます。
次のサンプルコードは「numリストの要素分ループして足し算」する処理です。
using System.Collections.Generic; namespace test { class Program { static void Main(string[] args) { List<int> num = new List<int> {1,3,4,7}; int i = 1; foreach (int r in num) { i = i + r; System.Console.WriteLine("rの値:" + r); } System.Console.WriteLine("iの答え:" + i); System.Console.ReadKey(); } } }
実行結果:
rの値:1 rの値:3 rの値:4 rの値:7 iの答え:16
リストの内容がrに格納されて、要素数分ループされているのがわかります。このforeachは、非常によく使われるので、コレクションを使うようになったら合わせて覚えていきましょう。
次に、for文を使ったときに陥りやすいエラーについて解説していきます。
for文使用時の注意
この章ではfor文を使うときの注意点について解説していきます。for文を使ってみたけど、思うようにいかない…という方は、こちらを確認してみてください。
無限ループ
for文やwhile文を使ったときに一番注意することは「無限ループ」です。
例えば、次のような条件のループを書いたとします。
- は20から始まる
- rが10以上の間は繰り返し続ける
- rは1ずつ増える
この条件では、いつまでも繰り返しを続ける条件を満たしてしまうため「無限ループ」に陥ってしまいます。無限ループに陥ると、プログラムを終了させるのに一苦労します。
初めて実行する場合は、ループさせる処理の中にブレークポイントを置いて実行しましょう。ステップインなどをつかい、条件が思った通りになっているか確認しながら実行していくのがポイントです。
ループの回数
思ったよりループの回数が多い、もしくは少ないという事も起きやすいミスです。条件を指定する時には「以上・以下」「より大きい・より小さい」という点に特に注意してfor文を書きましょう。
例えば次のfor文だとループの回数は10回になります。
for(int r = 1; r <= 10; r++) { i = i + r; }
条件式のイコールを取ると、ループの回数は9回になります。
for(int r = 1; r < 10; r++) { i = i + r; }
もし、ループの回数が思った通りにならないという時には条件式の演算子、数値をよく確認してみましょう。こちらもブレークポイントを使って、条件があっているか確認しながら動かしてみるとミスに気づきやすいですよ。
まとめ
C#でのfor文の使い方について解説してきました。
非常によく使う要素なので、何度も使って慣れていきましょう。もし分からなくなったら、またこの記事を読んで復習してみてくださいね。
それでは次の解説で!