forループ
メニューを表示するにはスワイプしてください
ループは、コードの一部を任意の回数だけ実行するための構造体。
ループにはさまざまな種類がある。
C# では、特定の回数だけコードを実行したい場合、for loopを使用。
for ループのテンプレート(構文)は次のとおり。
main.cs
123for(initiation; condition; operation) { // code to execute }
この構文を使用する例を考える。
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { // Output "Hello World" ten times. for(int i = 0; i < 10; i++) { Console.WriteLine("Hello World"); } } } }
i++ は i = i + 1 と同じ意味。変数の値を 1 増加させる操作。
同様に、i-- は値を 1 減少させる操作。
int i = 0は初期化部分。ループ開始時に初期化が行われる。ループの開始時にiという一時変数が新たに作成され、値0で初期化される;i < 10は条件部分。条件はループの各反復(繰り返し)ごとに確認される。条件が真である限り、ループは囲まれたコードブロックを実行し続ける;i++は各反復後に実行される操作。通常はインクリメントまたはデクリメント操作。各反復後にiの値が増加するため、10回の反復後にi < 10の条件が偽となり、ループが終了する。
forループの3つの構成要素 — initialization、condition、operation — はすべて省略可能であることが重要です。いずれかを省略することもできますが、その場合ループの動作が変わる可能性があります。
推奨はされませんが、ループ変数をループの外で宣言し、initialization部分を空にすることも可能です。この場合でもループは動作しますが、適切に扱わないと予期しない結果を招くことがあるため注意が必要です。
main.cs
12345678910111213141516using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { int i = 0; for(; i < 10; i++) { Console.WriteLine("Hello World"); } } } }
operation部分を省略し、ループのコードブロックの末尾に記述することもできます。この場合でも、変数iは各イテレーション後にインクリメントされるため、ループの動作は以前と同じです。
main.cs
1234567891011121314151617using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { int i = 0; for(; i < 10;) { Console.WriteLine("Hello World"); i++; } } } }
上記のコードでは、; が期待されるループ構文の位置にもセミコロン(int i = 0)を記述している点に注意してください。ループ変数を作成するかどうかに関わらず、このセミコロンは常に必要です。
ループ条件を省略することも可能ですが、その場合、手動で終了しない限りループが無限に実行されます(この点については後の章で詳しく学びます)。
main.cs
1234567891011121314151617using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { // In this case the variable `i` is useless so we don't create it. // The loop never ends for(;;) { Console.WriteLine("Hello World"); } } } }
注意
ループ構文
for(;;)では両方のセミコロンを必ず含める必要があります。これらは必須であり、省略するとコンパイラエラーが発生します。
i の値は各イテレーションごとに変化するため、この特性を活用できます。これを理解するために、各イテレーションで i の値を出力する簡単なプログラムを見てみましょう。
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 0; i < 10; i++) { Console.WriteLine(i); } } } }
9 から始まるため、0 で終了しています。イテレーションの合計回数は10回です。初期化、条件、操作を変更することで、2から20までの10個の偶数を出力できます。
注意
偶数とは
2で割り切れる数値です。例えば 2, 4, 6, 8, 10 などです。偶数には0も含まれますが、ここでは0より大きい偶数のみを扱います。
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 2; i <= 20; i += 2) { Console.WriteLine(i); } } } }
注意
i += 2はi = i + 2を短く書いたものです。この構文は他の演算子にも有効で、例えばi -= 2、i *= 2、i /= 2、i %= 2などがあります。
ループは 0 から始まり、各イテレーションごとに i の値が 2 ずつ増加します。条件を i <= 20 に変更することで、ループは 20 で終了します。
上記のロジックは for ループの仕組みを理解するためのものです。最初の 10 個の偶数を出力するには、もっと簡単なロジックを使うことができます。
main.cs
1234567891011121314using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 10; i++) { Console.WriteLine(i * 2); } } } }
この場合、条件ははるかに簡単です。例えば、最初の27個の偶数を求めたい場合、前の方法では27番目の偶数が何かを知る必要がありますが、この場合は単純に条件を i <= 27 に変更するだけで済みます。
main.cs
1234567891011121314using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 27; i++) { Console.WriteLine(i * 2); } } } }
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください