2021年12月17日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!total 797 count

++x/--x/x++/x--: 副作用は使いよう・こいつら実は便利だよう

Written By: 川俣 晶連絡先

この章のテーマ §

 前置、後置のインクリメント、デクリメント演算子を学習します。これらは副作用を発生させる危険な機能ですが、飲み込むととても便利です。

前提知識 §

Console.WriteLineメソッド, 文字列の基礎, 変数の基礎, int型

解説 §

 前置、後置のインクリメント(1加算)、デクリメント(1減算)演算子(++x/--x/x++/x--)は、変数に1を足す、1を引くという機能を持った演算子です。値に1を足す、1を引くではありません。変数を変化させます。

 ++が付く演算子は1を足します。

 --が付く演算子は1を引きます。

 変数名の手前に書くと、式を計算する前に変化させます。後に書くと式を計算した後で変化させます。

 これを使うと、たとえば配列を順次アクセスする際にarray[x++]のように書くことができて便利です。ここでarrayは配列の名前、xは添え字を格納した変数名とします。こう書いておくと、次に利用する添え字の値を式の中で更新できます。

 単に変数に1を足す、1を引く場合にも使います。a = a + 1よりもa += 1よりもa++の方が短いからです。

 こういった、式を計算する際に変数を変化させることを副作用といいます。副作用を含む式は、複数の変数の値を変化させることがあるので要注意です。

罠の数々 §

  • どういう順番に加算減算が行われるかの規定はないので、1つの式の中で変数を加工しつつ参照するコードはトラブルが起きやすい。曖昧な使い方、使い過ぎは厳禁である
  • ベテランはわりと使うので、比較的よく見かける機能である。ベテランはものぐさである。可読性が落ちることもないので、短く書ければその方が良いのだ
  • 負数化する-演算子を2つ並べて書きたい時は、中間に空白を入れよう。連続して書くとデクリメント演算子扱いされてしまう

参考リンク §

算術演算子 (C# リファレンス)

サンプルソース: incrementDecrement §

Console.WriteLine("後置インクリメント演算子の場合");

int a = 2;

int b = a++ * 2;

Console.WriteLine($"a={a}");

Console.WriteLine($"b={b}");

Console.WriteLine("前置インクリメント演算子の場合");

int c = 2;

int d = ++c * 2;

Console.WriteLine($"c={c}");

Console.WriteLine($"d={d}");

実行結果 §

後置インクリメント演算子の場合

a=3

b=4

前置インクリメント演算子の場合

c=3

d=6

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

 以下のプログラムの実行結果を予測してみよう。

var a = 1;

var b = ++--a;

Console.WriteLine(b);

  1. 0
  2. 1
  3. 2
  4. 3
  5. コンパイルエラー

[[解答]]

Facebook

キーワード【 川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!
【new_C#入門・全キーワード明快解説!】の次のコンテンツ
2021年
12月
18日
~?~:~演算子: 条件演算子は禁止されることもあるけれど知らないと仕事になりません
3days 0 count
total 756 count
【new_C#入門・全キーワード明快解説!】の前のコンテンツ
2021年
12月
16日
&&/||: 条件判断を高速化する切り札!
3days 0 count
total 842 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20211217101209
サイトの表紙【new_C#入門・全キーワード明快解説!】の表紙【new_C#入門・全キーワード明快解説!】のコンテンツ全リスト 【new_C#入門・全キーワード明快解説!】の入手全リスト 【new_C#入門・全キーワード明快解説!】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.