ここでは、C#のループについて学習します。ループとは、「同じ処理を複数回繰り返す」といったコードを書くことです。
- for文
- While文
- foreach文
の3つについて学びます。
ループを学習する前に、今回は、初心者向けに算術演算子の中でも特に重要なインクリメントとデクリメントについて説明します。
インクリメントとデクリメントとは、変数の値を1だけ増やしたり減らしたりする演算子です。インクリメントは「++」という記号で表され、デクリメントは「–」という記号で表されます。例えば、int型の変数xに5が代入されているとします。このとき、x++とすると、xの値は6になります。逆に、x–とすると、xの値は4になります。
インクリメントとデクリメントには、前置と後置という2種類の書き方があります。前置とは、変数の前に演算子を書くことです。後置とは、変数の後ろに演算子を書くことです。例えば、x++は後置インクリメント、++xは前置インクリメントです。同様に、x–は後置デクリメント、–xは前置デクリメントです。
では、前置と後置の違いは何でしょうか?実は、単独で使う場合にはどちらも同じ結果になります。しかし、他の式の中で使う場合には違いが出てきます。前置の場合には、まず演算子が実行されてから変数が評価されます。後置の場合には、まず変数が評価されてから演算子が実行されます。詳しく説明していきます。
算術演算子 インクリメントとデクリメント
インクリメントとデクリメントは、今ある値に、1を足し算する、もしくは、1を引き算するときに使います。
インクリメント
1を足し算するときに使います。まず、説明の為、足し算のコードを示します。
using System; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { int i = 0; Console.WriteLine(i); Console.WriteLine(i = i + 1); Console.WriteLine(i); } } }
実行結果は
となります。コードの
9行目、変数iの初期化(=0)を指定します。
10行目、この時のiの値は、初期値の0なので、0が表示されます。
11行目、i = i + 1 とすると、i =0 + 1なので、結果としてのiは0でなく、1になり、表示は1になります。
12行目、結果、iは、1に変化します。
理解できましたでしょうか?
前置インクリメント
この、i=i+1; を
++i;
と単純に書くことができます。
これを、前置インクリメントといいます。
下記のコードは、
i = i + 1 の部分を
++i
に変更しています。
using System; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { int i = 0; Console.WriteLine(i); Console.WriteLine(i++); Console.WriteLine(i); } } }
実行結果は
となります。コードの
9行目、変数iの初期化(=0)を指定します。
10行目、この時のiの値は、初期値の0なので、0が表示されます。
11行目、++i は i = i + 1 とほぼ同じ意味なので、表示は1になります。
12行目、結果、iは、1に変化します。
理解できましたでしょうか?
後置インクリメント
i++
変数の後ろ側に++を書くものを「後置インクリメント」といいます。
同じように、1足し算されますが、タイミングが異なります。
下記のコードは、
++i の部分を
i++
に変更しています。
using System; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { int i = 0; Console.WriteLine(i); Console.WriteLine(++i); Console.WriteLine(i); } } }
実行結果は
となります。コードの
9行目、変数iの初期化(=0)を指定します。
10行目、この時のiの値は、初期値の0なので、0が表示されます。
11行目、++i は ここでは表示は変わらず0になります。
12行目、ここで、1加算された結果が表示されます。
理解できましたでしょうか?
デクリメント
1を引き算するときに使います。まず、説明の為、引き算のコードを示します。
using System; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { int i = 10; Console.WriteLine(i); Console.WriteLine(i = i - 1); Console.WriteLine(i); } } }
実行結果は
となります。コードの
9行目、変数iの初期化(=10)を指定します。
10行目、この時のiの値は、初期値の10なので、10が表示されます。
11行目、i = i – 1 とすると、i =10 – 1なので、結果としてのiは10でなく、9になり、表示は9になります。
12行目、結果、iは、9に変化します。
理解できましたでしょうか?
前置デクリメント
この、i=i-1; を
–i;
と単純に書くことができます。
これを、前置デクリメントといいます。
下記のコードは、
i = i – 1 の部分を
–i
に変更しています。
using System; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { int i = 10; Console.WriteLine(i); Console.WriteLine(--i); Console.WriteLine(i); } } }
実行結果は
となります。コードの
9行目、変数iの初期化(=10)を指定します。
10行目、この時のiの値は、初期値の10なので、10が表示されます。
11行目、–i は i = i – 1 とほぼ同じ意味なので、表示は9になります。
12行目、結果、iは、9に変化します。
理解できましたでしょうか?
後置デクリメント
i–
変数の後ろ側に–を書くものを「後置デクリメント」といいます。
同じように、1引き算されますが、タイミングが異なります。
下記のコードは、
–i の部分を
i–
に変更しています。
using System; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { int i = 10; Console.WriteLine(i); Console.WriteLine(i--); Console.WriteLine(i); } } }
実行結果は
となります。コードの
9行目、変数iの初期化(=10)を指定します。
10行目、この時のiの値は、初期値の10なので、10が表示されます。
11行目、–i は ここでは表示は変わらず10になります。
12行目、ここで、1減算された結果が表示されます。
理解できましたでしょうか?
あとがき
このように、インクリメントやデクリメントを使う場合には、前置と後置の違いや評価の順序をよく理解しておく必要があります。そうしないと、バグやエラーの原因になる可能性があります。