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つを試してチャットを始めてください